Ejemplo n.º 1
0
    def create_dismissed_charge(
        cls,
        case_number=1,
        name="Theft of services",
        statute="164.125",
        level="Misdemeanor Class A",
        date=date_class(1901, 1, 1),
        violation_type="Offense Misdemeanor",
    ) -> Charge:
        cls.charge_count += 1
        disposition = DispositionCreator.create(date=date_class.today(),
                                                ruling="Dismissed")
        kwargs = {
            "case_number": case_number,
            "name": name,
            "statute": statute,
            "level": level,
            "date": date.strftime("%m/%d/%Y"),
            "disposition": disposition,
            "violation_type": violation_type,
        }

        charges = ChargeCreator.create(cls.charge_count, **kwargs)[0]
        assert len(charges) == 1
        return charges[0]
Ejemplo n.º 2
0
 def create_dismissed_charge(
         case=CaseFactory.create(),
         name="Theft of services",
         statute="164.125",
         level="Misdemeanor Class A",
         date=date_class(1901, 1, 1),
 ):
Ejemplo n.º 3
0
 def __init__(self, *args, **kwargs) -> None:
     if len(args) == 3:
         self.date = date_class(*args)
         self.relative = relativedelta()
     else:
         self.date = kwargs["date"]
         self.relative = kwargs["relative"] if kwargs.get(
             "relative") else relativedelta()
Ejemplo n.º 4
0
 def create(
         case=CaseFactory.create(),
         name="Theft of services",
         statute="164.125",
         level="Misdemeanor Class A",
         date=date_class(1901, 1, 1),
         disposition=None,
 ):
def test_expunger_for_record_with_mj_over_21(record_with_mj_over_21):
    expunger_result = Expunger.run(record_with_mj_over_21)
    assert expunger_result == {
        "CASEJD1-1":
        TimeEligibility(status=EligibilityStatus.ELIGIBLE,
                        reason="Eligible now",
                        date_will_be_eligible=date_class(2001, 3, 3))
    }
def test_probation_revoked_affects_time_eligibility(
        record_with_revoked_probation):
    record = record_with_revoked_probation
    expunger = Expunger(record)
    assert expunger.run()
    assert record.cases[0].charges[
        0].expungement_result.time_eligibility.date_will_be_eligible == date_class(
            2020, 11, 9)
def test_probation_revoked_affects_time_eligibility(
        record_with_revoked_probation):
    record = record_with_revoked_probation
    expunger = Expunger(record)
    expunger_result = expunger.run()
    assert len(expunger_result) == 6
    assert expunger_result[record.cases[0].charges[
        0].ambiguous_charge_id].date_will_be_eligible == date_class(
            2020, 11, 9)
Ejemplo n.º 8
0
 def default_dict(disposition=None):
     return {
         "case": CaseFactory.create(),
         "name": "Theft of services",
         "statute": "164.125",
         "level": "Misdemeanor Class A",
         "date": date_class(1901, 1, 1),
         "disposition": disposition,
     }
def test_expunger_for_record_with_mj_under_21(record_with_mj_under_21):
    assert isinstance(record_with_mj_under_21.charges[0], MarijuanaUnder21)
    expunger_result = Expunger.run(record_with_mj_under_21)
    assert expunger_result == {
        "CASEJD1-1":
        TimeEligibility(status=EligibilityStatus.ELIGIBLE,
                        reason="Eligible now",
                        date_will_be_eligible=date_class(1999, 3, 3))
    }
Ejemplo n.º 10
0
def test_parking_ticket_dismissal():
    charge_dict = {
        "case":
        CaseFactory.create(type_status=["Municipal Parking", "Closed"]),
        "name": "Unknown",
        "statute": "109",
        "level": "Violation Unclassified",
        "date": date_class(1901, 1, 1),
        "disposition": Dispositions.DISMISSED,
    }
    charge = ChargeFactory.create(**charge_dict)

    assert isinstance(charge, ParkingTicket)
    assert not charge.blocks_other_charges()
    assert charge.expungement_result.type_eligibility.status is EligibilityStatus.INELIGIBLE
    assert charge.expungement_result.type_eligibility.reason == "Ineligible by omission from statute"
Ejemplo n.º 11
0
def test_parking_ticket_unrecognized_disposition():
    charge_dict = {
        "case":
        CaseFactory.create(type_status=["Municipal Parking", "Closed"]),
        "name": "Unknown",
        "statute": "109",
        "level": "Violation Unclassified",
        "date": date_class(1901, 1, 1),
        "disposition": Dispositions.UNRECOGNIZED_DISPOSITION,
    }
    charge = ChargeFactory.create(**charge_dict)

    assert isinstance(charge, ParkingTicket)
    assert not charge.blocks_other_charges()
    assert charge.expungement_result.type_eligibility.status is EligibilityStatus.INELIGIBLE
    assert (
        charge.expungement_result.type_eligibility.reason ==
        "Always ineligible under 137.225(7)(a) (for convictions) or by omission from statute (for dismissals)"
    )
Ejemplo n.º 12
0
 def _build_ambiguous_charge(cls, case_number, date, disposition, level,
                             name, statute, violation_type):
     cls.charge_count += 1
     if disposition and not date:
         updated_date = disposition.date
     elif date:
         updated_date = date
     else:
         updated_date = date_class(1901, 1, 1)
     kwargs = {
         "case_number": case_number,
         "name": name,
         "statute": statute,
         "level": level,
         "date": updated_date,
         "disposition": disposition,
         "violation_type": violation_type,
     }
     charges = ChargeCreator.create(str(cls.charge_count), **kwargs)[0]
     return charges
Ejemplo n.º 13
0
class DateWithFuture:
    FUTURE = date_class(5000, 1, 1)

    def __init__(self, *args, **kwargs) -> None:
        if len(args) == 3:
            self.date = date_class(*args)
            self.relative = relativedelta()
        else:
            self.date = kwargs["date"]
            self.relative = kwargs["relative"] if kwargs.get(
                "relative") else relativedelta()

    @staticmethod
    def future():
        return DateWithFuture(date=DateWithFuture.FUTURE,
                              relative=relativedelta(days=1))

    @staticmethod
    def fromtimestamp(t):
        return DateWithFuture(date=date_class.fromtimestamp(t))

    @staticmethod
    def today():
        return DateWithFuture(date=date_class.today())

    @staticmethod
    def fromordinal(n):
        return DateWithFuture(date=date_class.fromordinal(n))

    @staticmethod
    def fromdatetime(d):
        return DateWithFuture(date=datetime.date(d))

    @staticmethod
    def max():
        return DateWithFuture(9999, 12, 31)

    @staticmethod
    def min():
        return DateWithFuture(1, 1, 1)

    @property
    def year(self):
        return self.date.year

    @property
    def month(self):
        return self.date.month

    @property
    def day(self):
        return self.date.day

    def strftime(self, fmt):
        if self.relative:
            years = f"{self.relative.years} year(s) " if self.relative.years else ""
            months = f"{self.relative.months} month(s) " if self.relative.months else ""
            days = f"{self.relative.days - 1} day(s) " if self.relative.days - 1 > 0 else ""
            return years + months + days + " From Conviction Of Open Charge"
        else:
            return self.date.strftime(fmt)

    def __add__(self, other):
        if isinstance(other, relativedelta):
            if self.relative:
                return DateWithFuture(date=DateWithFuture.FUTURE,
                                      relative=self.relative + other)
            else:
                return DateWithFuture(date=self.date + other)
        return NotImplemented

    def __sub__(self, other):
        if isinstance(other, relativedelta):
            if self.relative:
                return DateWithFuture(date=DateWithFuture.FUTURE,
                                      relative=self.relative - other)
            else:
                return DateWithFuture(date=self.date - other)
        return NotImplemented

    def __eq__(self, other):
        if isinstance(other, DateWithFuture):
            if self.date == other.date:
                today = date_class.today()
                return today + self.relative == today + other.relative
            else:
                return self.date == other.date
        return NotImplemented

    def __lt__(self, other):
        if isinstance(other, DateWithFuture):
            if self.date == other.date == DateWithFuture.FUTURE:
                today = date_class.today()
                return today + self.relative < today + other.relative
            elif self.date == DateWithFuture.FUTURE:
                return other.date == date_class.max
            elif other.date == DateWithFuture.FUTURE:
                return self.date != date_class.max
            else:
                return self.date < other.date
        return NotImplemented

    def __repr__(self):
        return f"DateWithFuture{repr((self.date, self.relative))}"

    def __hash__(self):
        return hash((self.date, self.relative))
Ejemplo n.º 14
0
class DateWithFuture:
    FUTURE = date_class(5000, 1, 1)

    def __init__(self, *args, **kwargs) -> None:
        if len(args) == 3:
            self.date = date_class(*args)
            self.relative = relativedelta()
        else:
            self.date = kwargs["date"]
            self.relative = kwargs["relative"] if kwargs.get(
                "relative") else relativedelta()

    @staticmethod
    def future():
        return DateWithFuture(date=DateWithFuture.FUTURE,
                              relative=relativedelta(days=1))

    @staticmethod
    def fromtimestamp(t):
        return DateWithFuture(date=date_class.fromtimestamp(t))

    @staticmethod
    def today():
        return DateWithFuture(date=date_class.today())

    @staticmethod
    def fromordinal(n):
        return DateWithFuture(date=date_class.fromordinal(n))

    @staticmethod
    def fromdatetime(d):
        return DateWithFuture(date=datetime.date(d))

    @staticmethod
    def max():
        return DateWithFuture(9999, 12, 31)

    @staticmethod
    def min():
        return DateWithFuture(1, 1, 1)

    @property
    def year(self):
        return self.date.year

    @property
    def month(self):
        return self.date.month

    @property
    def day(self):
        return self.date.day

    def strftime(self, fmt):
        if self.relative:
            years = DateWithFuture._build_strftime_part(
                self.relative.years, "year")
            months = DateWithFuture._build_strftime_part(
                self.relative.months, "month")
            days = DateWithFuture._build_strftime_part(self.relative.days - 1,
                                                       "day")
            return years + months + days + " from conviction of open charge"
        else:
            return self.date.strftime(fmt)

    @staticmethod
    def _build_strftime_part(number: int, name: str):
        if number == 1:
            return f"{number} {name}"
        elif number > 0:
            return f"{number} {name}s"
        else:
            return ""

    def __add__(self, other):
        if isinstance(other, relativedelta):
            if self.relative:
                return DateWithFuture(date=DateWithFuture.FUTURE,
                                      relative=self.relative + other)
            else:
                return DateWithFuture(date=self.date + other)
        return NotImplemented

    def __sub__(self, other):
        if isinstance(other, relativedelta):
            if self.relative:
                return DateWithFuture(date=DateWithFuture.FUTURE,
                                      relative=self.relative - other)
            else:
                return DateWithFuture(date=self.date - other)
        return NotImplemented

    def __eq__(self, other):
        if isinstance(other, DateWithFuture):
            if self.date == other.date:
                today = date_class.today()
                return today + self.relative == today + other.relative
            else:
                return self.date == other.date
        return NotImplemented

    def __lt__(self, other):
        if isinstance(other, DateWithFuture):
            if self.date == other.date == DateWithFuture.FUTURE:
                today = date_class.today()
                return today + self.relative < today + other.relative
            elif self.date == DateWithFuture.FUTURE:
                return other.date == date_class.max
            elif other.date == DateWithFuture.FUTURE:
                return self.date != date_class.max
            else:
                return self.date < other.date
        return NotImplemented

    def __repr__(self):
        return f"DateWithFuture(date={repr(self.date)}, relative={repr(self.relative)})"

    def __hash__(self):
        return hash((self.date, self.relative))
Ejemplo n.º 15
0
from expungeservice.models.expungement_result import EligibilityStatus
from expungeservice.models.charge_types.contempt_of_court import ContemptOfCourt

from tests.factories.charge_factory import ChargeFactory
from tests.factories.case_factory import CaseFactory
from tests.models.test_charge import Dispositions


def test_contempt_of_court_dismissed():
    case = CaseFactory.create(type_status=["Contempt of Court", "Closed"])
    charge = ChargeFactory.create(
        case_number=case.case_number,
        name="contempt of court",
        statute="33",
        level="N/A",
        date=date_class(1901, 1, 1),
        disposition=Dispositions.DISMISSED,
        violation_type=case.violation_type,
    )

    assert isinstance(charge, ContemptOfCourt)
    assert charge.type_eligibility.status is EligibilityStatus.INELIGIBLE
    assert charge.type_eligibility.reason == "Ineligible by omission from statute"


def test_contempt_of_court_convicted():
    case = CaseFactory.create(type_status=["Civil Offense", "Closed"])
    charge = ChargeFactory.create(
        case_number=case.case_number,
        name="contempt of court",
        statute="33065",