from typing import List, Optional from ee.xml import types __all__ = [ "facts", "find_root_tag", "schematic_references", "part_numbers", "supplier_part_numbers", ] def find_root_tag(root): return next((tag for tag, klass in types.GDSClassesMapping.items() if klass == type(root)), None) def schematic_references(part: types.Part) -> List[types.SchematicReference]: return [] if part.referencesProp is None or part.referencesProp.schematic_reference is None else \ part.referencesProp.schematic_reference def part_numbers(part: types.Part) -> List[types.PartNumber]: return [] if part.referencesProp is None or part.referencesProp.part_number is None else \ part.referencesProp.part_number def supplier_part_numbers(part: types.Part) -> List[types.SupplierPartNumber]: return [] if part.referencesProp is None or part.referencesProp.supplier_part_number is None else \ part.referencesProp.supplier_part_number def facts(part: types.Part, create=False) -> Optional[types.FactList]: fs: types.FactList = part.factsProp if fs is not None: return fs if not create: return fs = types.FactList() part.factsProp = fs return fs def find_fact(fs: types.FactList, key: str) -> Optional[types.Fact]: l: List[types.Fact] = fs.factProp return next((f for f in l if f.keyProp == key), None)