from typing import List, Optional from ee.xml import types __all__ = [ "facts", "find_root_tag", "find_pn", "find_dpn", ] def find_root_tag(root): return next((tag for tag, klass in types.GDSClassesMapping.items() if klass == type(root)), None) def part_numbers(part: types.Part) -> List[types.PartNumber]: pns = part.part_numbersProp # type: types.PartNumberList if pns is None: return [] return pns.part_numberProp def find_pn(part: types.Part) -> Optional[str]: for pn in part_numbers(part): if pn.distributor is None: return pn.value def find_dpn(part: types.Part, distributor: str) -> Optional[str]: for pn in part_numbers(part): if pn.distributor == distributor: return pn.value 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