def test_ecomap(): """ test mappings between GAF codes and ECO """ m = EcoMap() assert m.coderef_to_ecoclass('IEA', 'GO_REF:0000002') == 'ECO:0000256' assert m.coderef_to_ecoclass('IEA') == 'ECO:0000501' assert m.coderef_to_ecoclass('IEA', 'FAKE:ID') == 'ECO:0000501' assert m.ecoclass_to_coderef('ECO:0000501') == ('IEA', None) assert m.ecoclass_to_coderef('ECO:0000256') == ('IEA', 'GO_REF:0000002') assert m.coderef_to_ecoclass('BADCODE', None) == None assert m.coderef_to_ecoclass('BADCODE', 'GO_REF:xxx') == None assert m.ecoclass_to_coderef('ECO:9999999999999999999') == (None, None) assert m.coderef_to_ecoclass('ISO', None) == 'ECO:0000266'
class AssocFilter: def __init__(self, filter_rule : FilterRule): self.filter_rule = filter_rule self.ecomap = EcoMap() def validate_line(self, assoc): evi_code = self.ecomap.ecoclass_to_coderef(assoc["evidence"]["type"])[0] if evi_code in self.filter_rule.unwanted_evidence_codes: return False if len(self.filter_rule.unwanted_evi_code_ref_combos) > 0: references = assoc["evidence"]["has_supporting_reference"] for evi_ref_combo in self.filter_rule.unwanted_evi_code_ref_combos: if evi_ref_combo[0] == evi_code and evi_ref_combo[1] in references: return False if len(self.filter_rule.unwanted_properties) > 0 and "annotation_properties" in assoc: for up in self.filter_rule.unwanted_properties: if up in assoc["annotation_properties"]: return False if len(self.filter_rule.required_attributes) > 0: meets_requirement = False for attr in self.filter_rule.required_attributes: # a[attr] is dict for k in attr.keys(): if assoc[k] in attr[k]: meets_requirement = True if not meets_requirement: return False return True