diff options
Diffstat (limited to 'src/ee/part/__init__.py')
-rw-r--r-- | src/ee/part/__init__.py | 52 |
1 files changed, 48 insertions, 4 deletions
diff --git a/src/ee/part/__init__.py b/src/ee/part/__init__.py index ff6c7f1..a2face8 100644 --- a/src/ee/part/__init__.py +++ b/src/ee/part/__init__.py @@ -1,11 +1,13 @@ from pathlib import Path from typing import List, Optional, Iterator, Union -from ee import EeException +from ee import EeException, EeValType from ee.money import Money from ee.xml import types __all__ = [ + "FactType", + "EeValueFactType", "Part", "PartDb", "load_db", @@ -13,6 +15,18 @@ __all__ = [ ] +class FactType(object): + def __init__(self, uri: str, label: str): + self.uri = uri + self.label = label + + +class EeValueFactType(FactType): + def __init__(self, uri: str, label, ee_type: EeValType): + super().__init__(uri, label) + self.ee_type = ee_type + + class Reference(object): pass @@ -324,12 +338,42 @@ class Part(object): self.xml.factsProp.fact = [f for f in self.xml.factsProp.fact if f.keyProp != key] +class Fact(object): + def __init__(self, xml: types.Fact): + self.xml = xml + + @property + def key(self) -> str: + return self.xml.keyProp + + @property + def value(self) -> str: + return self.xml.valueProp + + class Facts(object): - def __init__(self, part): + def __init__(self, part: Part): self.part = part - def add(self, key: str, value: str, label=None): - self.part.get_facts().append(types.Fact(key=key, label=label, value=value)) + @staticmethod + def _get_key(key: Union[str, FactType]): + return key if isinstance(key, str) else key.uri + + def add(self, key: Union[str, FactType], value: str, label=None): + k = self._get_key(key) + self.part.get_facts().append(types.Fact(key=k, label=label, value=value)) + + def get(self, key: Union[str, FactType]) -> Fact: + k = self._get_key(key) + return next((Fact(f) for f in self.part.get_facts() if f.keyProp == k), None) + + def all(self, key: Union[str, FactType]) -> List[Fact]: + k = self._get_key(key) + return [Fact(f) for f in self.part.get_facts() if f.keyProp == k] + + def get_value(self, key: Union[str, FactType]) -> Optional[str]: + k = self._get_key(key) + return next((f.valueProp for f in self.part.get_facts() if f.keyProp == k), None) class Entry(object): |