from typing import List, Optional from ee.xml import bomFile, indexFile __all__ = [ "facts", "find_root_tag", "find_pn", "find_dpn", ] def find_root_tag(root): tag = next((tag for tag, klass in bomFile.GDSClassesMapping.items() if klass == type(root)), None) if tag is not None: return tag return next((tag for tag, klass in indexFile.GDSClassesMapping.items() if klass == type(root))) def part_numbers(part: bomFile.Part) -> List[bomFile.PartNumber]: pns = part.part_numbersProp # type: bomFile.PartNumberList if pns is None: return [] return pns.part_numberProp def find_pn(part: bomFile.Part) -> str: for pn in part_numbers(part): if pn.distributor is None: return pn.value def find_dpn(part: bomFile.Part, distributor: str) -> str: for pn in part_numbers(part): if pn.distributor == distributor: return pn.value def facts(part: bomFile.Part, create=False) -> Optional[bomFile.FactList]: fs: bomFile.FactList = part.factsProp if fs is not None: return fs if not create: return fs = bomFile.FactList() part.factsProp = fs return fs