def sorted_violation_subtypes_by_severity( state_code: str, violation_subtypes: List[str], default_severity_order: List[str] ) -> List[str]: """Sorts the provided |violation_subtypes| by severity, and returns the list in order of descending severity. Defers to the severity ordering in the |default_severity_order| if no state-specific logic is implemented.""" if state_code.upper() == "US_MO": return us_mo_violation_utils.us_mo_sorted_violation_subtypes_by_severity( violation_subtypes ) if state_code.upper() == "US_PA": return us_pa_violation_utils.us_pa_sorted_violation_subtypes_by_severity( violation_subtypes ) logging.warning( "No implemented violation subtype ordering for state [%s]", state_code ) sorted_violation_subtypes = sorted( violation_subtypes, key=lambda subtype: safe_list_index( default_severity_order, subtype, sys.maxsize ), ) return sorted_violation_subtypes
def test_us_pa_sorted_violation_subtypes_by_severity(self) -> None: violation_subtypes = ['LOW_TECH', 'LAW', 'ABSCONDED'] sorted_subtypes = us_pa_sorted_violation_subtypes_by_severity( violation_subtypes) expected_sorted_subtypes = ['LAW', 'ABSCONDED', 'LOW_TECH'] self.assertEqual(expected_sorted_subtypes, sorted_subtypes)
def test_us_pa_sorted_violation_subtypes_by_severity(self) -> None: violation_subtypes = ["LOW_TECH", "LAW", "ABSCONDED"] sorted_subtypes = us_pa_sorted_violation_subtypes_by_severity( violation_subtypes) expected_sorted_subtypes = ["LAW", "ABSCONDED", "LOW_TECH"] self.assertEqual(expected_sorted_subtypes, sorted_subtypes)
def test_us_pa_sorted_violation_subtypes_by_severity_empty_list( self) -> None: violation_subtypes: List[str] = [] sorted_subtypes = us_pa_sorted_violation_subtypes_by_severity( violation_subtypes) expected_sorted_subtypes: List[str] = [] self.assertEqual(expected_sorted_subtypes, sorted_subtypes)
def test_us_pa_sorted_violation_subtypes_by_severity_electronic_monitoring( self) -> None: violation_subtypes = ['LOW_TECH', 'MED_TECH', 'ELEC_MONITORING'] sorted_subtypes = us_pa_sorted_violation_subtypes_by_severity( violation_subtypes) expected_sorted_subtypes = ['ELEC_MONITORING', 'MED_TECH', 'LOW_TECH'] self.assertEqual(expected_sorted_subtypes, sorted_subtypes)
def test_us_pa_sorted_violation_subtypes_by_severity_electronic_monitoring( self, ) -> None: violation_subtypes = ["LOW_TECH", "MED_TECH", "ELEC_MONITORING"] sorted_subtypes = us_pa_sorted_violation_subtypes_by_severity( violation_subtypes) expected_sorted_subtypes = ["ELEC_MONITORING", "MED_TECH", "LOW_TECH"] self.assertEqual(expected_sorted_subtypes, sorted_subtypes)
def test_us_pa_sorted_violation_subtypes_by_severity_substance_abuse( self) -> None: violation_subtypes = ['LOW_TECH', 'SUBSTANCE_ABUSE', 'ELEC_MONITORING'] sorted_subtypes = us_pa_sorted_violation_subtypes_by_severity( violation_subtypes) expected_sorted_subtypes = [ 'SUBSTANCE_ABUSE', 'ELEC_MONITORING', 'LOW_TECH' ] self.assertEqual(expected_sorted_subtypes, sorted_subtypes)
def test_us_pa_sorted_violation_subtypes_by_severity_high_tech( self) -> None: violation_subtypes = ['ABSCONDED', 'SUBSTANCE_ABUSE', 'HIGH_TECH'] sorted_subtypes = us_pa_sorted_violation_subtypes_by_severity( violation_subtypes) expected_sorted_subtypes = [ 'HIGH_TECH', 'ABSCONDED', 'SUBSTANCE_ABUSE' ] self.assertEqual(expected_sorted_subtypes, sorted_subtypes)
def test_us_pa_sorted_violation_subtypes_by_severity_substance_abuse( self) -> None: violation_subtypes = ["LOW_TECH", "SUBSTANCE_ABUSE", "ELEC_MONITORING"] sorted_subtypes = us_pa_sorted_violation_subtypes_by_severity( violation_subtypes) expected_sorted_subtypes = [ "SUBSTANCE_ABUSE", "ELEC_MONITORING", "LOW_TECH" ] self.assertEqual(expected_sorted_subtypes, sorted_subtypes)
def test_us_pa_sorted_violation_subtypes_by_severity_high_tech( self) -> None: violation_subtypes = ["ABSCONDED", "SUBSTANCE_ABUSE", "HIGH_TECH"] sorted_subtypes = us_pa_sorted_violation_subtypes_by_severity( violation_subtypes) expected_sorted_subtypes = [ "HIGH_TECH", "ABSCONDED", "SUBSTANCE_ABUSE" ] self.assertEqual(expected_sorted_subtypes, sorted_subtypes)