def build_search_results( username: str, password: str, aliases: Tuple[Alias, ...], search_cache: LRUCache ) -> Tuple[List[OeciCase], List[str]]: alias_match = search_cache[aliases] if alias_match: return alias_match else: errors = [] search_results: List[OeciCase] = [] for alias in aliases: alias_lower = Alias( alias.first_name.lower().strip(), alias.last_name.lower().strip(), alias.middle_name.lower().strip(), alias.birth_date, ) try: alias_search_result = DemoRecords.records.get(alias_lower, []) search_results += alias_search_result except Exception as e: errors.append(str(e)) print(e) if not errors: search_cache[aliases] = search_results, errors return search_results, errors
def test_search_cache(service, monkeypatch): monkeypatch.setattr(Crawler, "attempt_login", mock_login("Successful login response")) monkeypatch.setattr(Crawler, "search", mock_search(service, "john_doe")) test_alias = (Alias("john", "deer", "", ""), ) test_alias_dictionary = [ { "first_name": "john", "last_name": "deer", "middle_name": "", "birth_date": "" }, ] Search._build_record_summary("username", "password", test_alias_dictionary, {}, {}, date.today()) assert Search.search_cache[test_alias]
def test_search_cache_error(service, monkeypatch): monkeypatch.setattr(Crawler, "attempt_login", mock_login("Successful login response")) monkeypatch.setattr(Crawler, "search", mock_search_fail()) test_fail_alias = (Alias("jane", "doe", "q", "June 29th"), ) test_fail_alias_dictionary = [ { "first_name": "jane", "last_name": "doe", "middle_name": "q", "birth_date": "June 29th" }, ] Search._build_record_summary("username", "password", test_fail_alias_dictionary, {}, {}) assert not Search.search_cache[test_fail_alias]
class DemoRecords: @staticmethod def build_search_results( username: str, password: str, aliases: Tuple[Alias, ...], search_cache: LRUCache ) -> Tuple[List[OeciCase], List[str]]: alias_match = search_cache[aliases] if alias_match: return alias_match else: errors = [] search_results: List[OeciCase] = [] for alias in aliases: alias_lower = Alias( alias.first_name.lower().strip(), alias.last_name.lower().strip(), alias.middle_name.lower().strip(), alias.birth_date, ) try: alias_search_result = DemoRecords.records.get(alias_lower, []) search_results += alias_search_result except Exception as e: errors.append(str(e)) print(e) if not errors: search_cache[aliases] = search_results, errors return search_results, errors shared_case_data = { "citation_number": "something", "case_detail_link": "?404", "edit_status": EditStatus.UNCHANGED, "current_status": "Closed", "balance_due_in_cents": 0, "birth_year": 1995, "location": "Multnomah", "violation_type": "Offense Misdemeanor", "date": date_class.today(), "district_attorney_number": "01234567", "sid": "OR12345678", } shared_charge_data = { "balance_due_in_cents": 0, "edit_status": EditStatus.UNCHANGED, "probation_revoked": None, "level": "Misdemeanor Class C", "statute": "166.015", "name": "Disorderly Conduct", "date": date_class.today(), "disposition": DispositionCreator.empty(), } common_name_record_1 = [ OeciCase( summary=from_dict( data_class=CaseSummary, data={ **shared_case_data, "name": "COMMON A. NAME", "birth_year": 1970, "case_number": "100000", "location": "Clackamas", "date": date_class.today() - relativedelta(years=6, days=12, months=4), }, ), charges=( from_dict( data_class=OeciCharge, data={ **shared_charge_data, "ambiguous_charge_id": "100000-1", "name": "Aggravated Theft in the First Degree", "statute": "164.057", "level": "Felony Class B", "date": date_class.today() - relativedelta(years=6, days=12, months=4), "disposition": DispositionCreator.create( date=date_class.today() - relativedelta(years=6, days=12, months=3), ruling="Convicted" ), }, ), ), ), OeciCase( summary=from_dict( data_class=CaseSummary, data={ **shared_case_data, "name": "COMMON NAME", "birth_year": 1970, "case_number": "110000", "location": "Baker", "date": date_class.today() - relativedelta(years=7, days=26, months=7), }, ), charges=( from_dict( data_class=OeciCharge, data={ **shared_charge_data, "ambiguous_charge_id": "110000-1", "name": "Theft in the Second Degree", "statute": "164.057", "level": "Misdemeanor Class A", "date": date_class.today() - relativedelta(years=7, days=26, months=7), "disposition": DispositionCreator.create( date=date_class.today() - relativedelta(years=7, days=26, months=6), ruling="Convicted" ), }, ), ), ), OeciCase( summary=from_dict( data_class=CaseSummary, data={ **shared_case_data, "name": "COMMON A NAME", "birth_year": 1970, "case_number": "120000", "location": "Baker", "date": date_class.today() - relativedelta(years=7, days=26, months=7), }, ), charges=( from_dict( data_class=OeciCharge, data={ **shared_charge_data, "ambiguous_charge_id": "120000-1", "name": "Poss under oz Marijuana", "statute": "475.000", "level": "violation", "date": date_class.today() - relativedelta(years=8, days=26, months=7), "disposition": DispositionCreator.create( date=date_class.today() - relativedelta(years=8, days=26, months=6), ruling="Convicted" ), }, ), ), ), ] common_name_record_2 = [ OeciCase( summary=from_dict( data_class=CaseSummary, data={ **shared_case_data, "name": "COMMON NAME", "birth_year": 1985, "case_number": "200000", "location": "Benton", "date": date_class.today() - relativedelta(years=3, days=12, months=4), }, ), charges=( from_dict( data_class=OeciCharge, data={ **shared_charge_data, "ambiguous_charge_id": "200000-1", "name": "Obstruction of search warrant", "statute": "162.247", "level": "Misdemeanor Class A", "date": date_class.today() - relativedelta(years=3, days=12, months=4), "disposition": DispositionCreator.create( date=date_class.today() - relativedelta(years=3, days=12, months=4), ruling="Dismissed" ), }, ), ), ), OeciCase( summary=from_dict( data_class=CaseSummary, data={ **shared_case_data, "name": "COMMON B. NAME", "birth_year": 1985, "case_number": "210000", "location": "Baker", "date": date_class.today() - relativedelta(years=4, days=5, months=2), }, ), charges=( from_dict( data_class=OeciCharge, data={ **shared_charge_data, "ambiguous_charge_id": "210000-1", "name": "Poss Controlled Sub", "statute": "475.9924A", "level": "Felony Unclassified", "date": date_class.today() - relativedelta(years=4, days=5, months=2), "disposition": DispositionCreator.create( date=date_class.today() - relativedelta(years=4), ruling="Convicted" ), }, ), ), ), ] # "date": date_class.today() - relativedelta(years=3, days=9, months =5), records = { Alias("john", "common", "", ""): common_name_record_1 + common_name_record_2, Alias("john", "common", "", "1/1/1970"): common_name_record_1, Alias("john", "common", "", "2/2/1985"): common_name_record_2, Alias("single", "conviction", "", ""): [ OeciCase( summary=from_dict( data_class=CaseSummary, data={ **shared_case_data, "name": "SINGLE OFFENSE", "birth_year": 1995, "case_number": "100000", "location": "Deschutes", "date": date_class.today() - relativedelta(years=5), "violation_type": "Offense Felony", }, ), charges=( from_dict( data_class=OeciCharge, data={ **shared_charge_data, "ambiguous_charge_id": "100000-1", "name": "Identity Theft", "statute": "165.800", "level": "Felony Class C", "date": date_class.today() - relativedelta(years=5), "disposition": DispositionCreator.create( date=date_class.today() - relativedelta(years=4, months=9), ruling="Convicted" ), }, ), ), ), ], Alias("multiple", "charges", "", ""): [ OeciCase( summary=from_dict( data_class=CaseSummary, data={ **shared_case_data, "balance_due_in_cents": 100000, "name": "MULTIPLE CHARGES", "birth_year": 1990, "case_number": "100000", "location": "Baker", "date": date_class.today() - relativedelta(years=4), "violation_type": "Offense Misdemeanor", }, ), charges=( from_dict( data_class=OeciCharge, data={ **shared_charge_data, "ambiguous_charge_id": "100000-1", "name": "Disorderly Conduct in the First Degree", "statute": "166.223", "level": "Misdemeanor Class A", "date": date_class.today() - relativedelta(years=4), "disposition": DispositionCreator.create( date=date_class.today() - relativedelta(years=3, months=9), ruling="Convicted" ), "balance_due_in_cents": 100000, }, ), from_dict( data_class=OeciCharge, data={ **shared_charge_data, "ambiguous_charge_id": "100000-2", "name": "Disorderly Conduct in the Second Degree", "statute": "166.2250A", "level": "Misdemeanor Class B", "date": date_class.today() - relativedelta(years=4), "disposition": DispositionCreator.create( date=date_class.today() - relativedelta(years=3, months=9), ruling="Dismissed" ), "balance_due_in_cents": 100000, }, ), ), ), OeciCase( summary=from_dict( data_class=CaseSummary, data={ **shared_case_data, "name": "MULTIPLE CHARGES", "birth_year": 1990, "case_number": "110000", "location": "Multnomah", "date": date_class.today() - relativedelta(years=1), "violation_type": "Offense Misdemeanor", }, ), charges=( from_dict( data_class=OeciCharge, data={ **shared_charge_data, "ambiguous_charge_id": "110000-1", "name": "Theft in the Third Degree", "statute": "164.043", "level": "Misdemeanor Class C", "date": date_class.today() - relativedelta(years=1), "disposition": DispositionCreator.create( date=date_class.today() - relativedelta(months=9), ruling="Dismissed" ), }, ), ), ), OeciCase( summary=from_dict( data_class=CaseSummary, data={ **shared_case_data, "name": "MULTIPLE CHARGES", "birth_year": 1990, "case_number": "120000", "location": "Multnomah", "date": date_class.today() - relativedelta(years=12), "violation_type": "Offense Violation", }, ), charges=( from_dict( data_class=OeciCharge, data={ **shared_charge_data, "ambiguous_charge_id": "120000-1", "name": "Failure to Obey Traffic Control Device", "statute": "811.265", "level": "Violation", "date": date_class.today() - relativedelta(years=12), "disposition": DispositionCreator.create( date=date_class.today() - relativedelta(years=11, months=9), ruling="Dismissed" ), }, ), ), ), ], Alias("portland", "protester", "", ""): [ OeciCase( summary=from_dict( data_class=CaseSummary, data={ **shared_case_data, "current_status": "Open", "name": "DEFUND POLICE", "case_number": "100000", "violation_type": "Offense Misdemeanor", }, ), charges=( from_dict( data_class=OeciCharge, data={ **shared_charge_data, "ambiguous_charge_id": "100000-1", "name": "Assaulting a Public Safety Officer", "statute": "163.208", "level": "Felony Class C", }, ), from_dict( data_class=OeciCharge, data={ **shared_charge_data, "ambiguous_charge_id": "100000-3", "name": "Interfering w/ Peace/Parole and Probation Officer", "statute": "162.247", "level": "Misdemeanor Class A", "date": date_class.today() + relativedelta(days=1), }, ), from_dict( data_class=OeciCharge, data={ **shared_charge_data, "ambiguous_charge_id": "100000-4", "name": "Disorderly Conduct in the First Degree", "statute": "166.0232A", "level": "Misdemeanor Class A", }, ), from_dict( data_class=OeciCharge, data={ **shared_charge_data, "ambiguous_charge_id": "100000-5", "name": "Resisting Arrest", "statute": "162.315", "level": "Misdemeanor Class A", }, ), from_dict( data_class=OeciCharge, data={ **shared_charge_data, "ambiguous_charge_id": "100000-6", "name": "Riot", "statute": "166.015", "level": "Felony Class C", }, ), from_dict( data_class=OeciCharge, data={ **shared_charge_data, "ambiguous_charge_id": "100000-7", "name": "Riot While Masked", "statute": "166.015A", "level": "Felony Class B", }, ), ), ), ], Alias("more", "categories", "", ""): [ OeciCase( summary=from_dict( data_class=CaseSummary, data={ **shared_case_data, "current_status": "Closed", "name": "John Notaperson", "case_number": "123456", "violation_type": "Offense Felony", "balance_due_in_cents": 50000, }, ), charges=( from_dict( data_class=OeciCharge, data={ **shared_charge_data, "ambiguous_charge_id": "123456-1", "name": "Assaulting a Public Safety Officer", "statute": "163.208", "level": "Felony Class C", "date": date_class.today() - relativedelta(years=2), "disposition": DispositionCreator.create( date=date_class.today() - relativedelta(years=1, months=9), ruling="Convicted" ), "balance_due_in_cents": 50000, }, ), from_dict( data_class=OeciCharge, data={ **shared_charge_data, "ambiguous_charge_id": "123456-2", "name": "Felony Riot", "statute": "111.111", "level": "Felony Class C", "date": date_class.today() - relativedelta(years=2), "disposition": DispositionCreator.create( date=date_class.today() - relativedelta(years=1, months=9), ruling="Dismissed" ), "balance_due_in_cents": 50000, }, ), ), ), OeciCase( summary=from_dict( data_class=CaseSummary, data={ **shared_case_data, "current_status": "Closed", "name": "John Notaperson", "case_number": "234567", "violation_type": "Offense Felony", }, ), charges=( from_dict( data_class=OeciCharge, data={ **shared_charge_data, "ambiguous_charge_id": "234567-1", "name": "Assaulting a Public Safety Officer", "statute": "163.208", "level": "Felony Class C", "date": date_class.today() - relativedelta(years=5), "disposition": DispositionCreator.create( date=date_class.today() - relativedelta(years=4, months=9), ruling="Convicted" ), }, ), ), ), OeciCase( summary=from_dict( data_class=CaseSummary, data={ **shared_case_data, "current_status": "Closed", "name": "John Notaperson", "case_number": "333333", "violation_type": "Offense Violation", }, ), charges=( from_dict( data_class=OeciCharge, data={ **shared_charge_data, "ambiguous_charge_id": "333333-1", "name": "Possession of Marijuana < 1 Ounce", "statute": "4758643", "level": "Violation Unclassified", "date": date_class.today() - relativedelta(years=5), "disposition": DispositionCreator.create( date=date_class.today() - relativedelta(years=4, months=9), ruling="Convicted" ), }, ), ), ), OeciCase( summary=from_dict( data_class=CaseSummary, data={ **shared_case_data, "current_status": "Closed", "name": "John Notaperson", "case_number": "444444", "violation_type": "Offense Violation", "balance_due_in_cents": 50000, }, ), charges=( from_dict( data_class=OeciCharge, data={ **shared_charge_data, "ambiguous_charge_id": "444444-1", "name": "Possession of Marijuana < 1 Ounce", "statute": "4758643", "level": "Violation Unclassified", "date": date_class.today() - relativedelta(years=5), "disposition": DispositionCreator.create( date=date_class.today() - relativedelta(years=4, months=9), ruling="Convicted" ), "balance_due_in_cents": 50000, }, ), ), ), ], }