from pathlib import Path from ee.part import PartDb, load_db, save_db, Part, fact_keys from ee.xml import types __all__ = ["pn_part_search_list"] ignored_part_classes = [ "mechanical" ] def pn_part_search_list(in_path: Path, out_path: Path, supplier: str): in_parts = load_db(in_path) out_parts = PartDb() # print("loaded {} existing parts".format(in_parts.size())) for xml in in_parts.iterparts(): part = Part(xml) pn_value = next((p.valueProp for p in part.get_mpns()), None) part_class = part.find_fact(fact_keys.part_class) if part_class: if part_class.valueProp in ignored_part_classes: continue if pn_value is None: refs = [ref.referenceProp for ref in part.get_schematic_references()] print("Skipping part with no part number: schematic reference: {}".format(", ".join(refs))) continue entry = out_parts.find_by_pn(pn_value) if entry is not None: continue new_part = types.Part() new_part.referencesProp = xml.referencesProp out_parts.add_entry(new_part, True) # print("Saving {} work parts".format(out_parts.size())) save_db(out_path, out_parts)