def add_to_record(self, record: Record) -> None: # track multi-CDS modules to avoid duplication added_modules = set() for cds, result in self.cds_results.items(): for module in result.modules: if module in added_modules: continue added_modules.add(module) domains: List[AntismashDomain] = [] for component in module: if component.locus == cds.get_name(): domain = result.domain_features[component.domain] else: other_cds_results = self.cds_results[ record.get_cds_by_name(component.locus)] domain = other_cds_results.domain_features[ component.domain] domains.append(domain) mod_type = ModuleFeature.types.UNKNOWN if module.is_nrps(): mod_type = ModuleFeature.types.NRPS elif module.is_pks(): mod_type = ModuleFeature.types.PKS feature = ModuleFeature(domains, mod_type, complete=module.is_complete(), starter=module.is_starter_module(), final=module.is_termination_module(), iterative=module.is_iterative()) record.add_module(feature)
def from_json(json: Dict[str, Any], record: Record) -> Optional["NRPSPKSDomains"]: if NRPSPKSDomains.schema_version != json.get("schema_version"): logging.warning("Schema version mismatch, discarding NRPS PKS domain results") return None if record.id != json.get("record_id"): logging.warning("Record identifier mismatch, discarding NRPS PKS domain results") return None cds_results = {} for cds_name, cds_result in json["cds_results"].items(): cds = record.get_cds_by_name(cds_name) cds_result = CDSResult.from_json(cds_result) cds_result.annotate_domains(record, cds) cds_results[cds] = cds_result return NRPSPKSDomains(record.id, cds_results)