from typing import List from ee import EeVal from ee.part import Part, FactType, common_fact_types, EeValueFactType def to_str(part, fact_type, value, op): v = None if isinstance(fact_type, EeValueFactType): eeft: EeValueFactType=fact_type ev = EeVal.try_parse(value, eeft.ee_type.symbol) v = str(ev) if not v: v = value return "{}.{} {} {}".format(part.printable_reference, fact_type.label or fact_type.uri, op, v) class Requirement(object): def __init__(self, part: Part): self.part = part class EqualRequirement(Requirement): def __init__(self, part: Part, fact_type: FactType, value: str): super().__init__(part) self.fact_type = fact_type self.value = value def __str__(self): return to_str(self.part, self.fact_type, self.value, "==") class MinRequirement(Requirement): def __init__(self, part: Part, fact_type: FactType, value: str): super().__init__(part) self.fact_type = fact_type self.value = value def __str__(self): return to_str(self.part, self.fact_type, self.value, ">") class MaxRequirement(Requirement): def __init__(self, part: Part, fact_type: FactType, value: str): super().__init__(part) self.fact_type = fact_type self.value = value def __str__(self): return to_str(self.part, self.fact_type, self.value, "<") class PartAnalysis(object): def __init__(self, part: Part, requirements: List[Requirement]): self.part = part self.requirements = requirements def analyze_requirements(part: Part) -> PartAnalysis: rs = [] resistance = part.facts.get_value(common_fact_types.resistance) if resistance: rs.append(EqualRequirement(part, common_fact_types.resistance, resistance)) capacitance = part.facts.get_value(common_fact_types.capacitance) if capacitance: rs.append(EqualRequirement(part, common_fact_types.capacitance, capacitance)) return PartAnalysis(part, rs)