diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/ee/digikey/doit.py | 4 | ||||
-rw-r--r-- | src/ee/ds/__init__.py | 20 |
2 files changed, 17 insertions, 7 deletions
diff --git a/src/ee/digikey/doit.py b/src/ee/digikey/doit.py index 6f7c2d5..0452530 100644 --- a/src/ee/digikey/doit.py +++ b/src/ee/digikey/doit.py @@ -142,9 +142,7 @@ def download_part_facts(output: DataSet, in_ds: DataSet): for a in product.attributes: key = "{}/{}".format(a.attribute_type.id, a.attribute_type.label) - key = key.replace("%", "_") - value = a.value.replace("%", "%%") - o.set(key, value) + o.set(key, a.value) def task_digikey_fetch_full_part_facts(): diff --git a/src/ee/ds/__init__.py b/src/ee/ds/__init__.py index 5b4da4d..026ab9b 100644 --- a/src/ee/ds/__init__.py +++ b/src/ee/ds/__init__.py @@ -15,7 +15,6 @@ class ObjectType(object): def __init__(self, name: str): self._name = name self._fields = [] # type: List[str] - self._objects = {} def __eq__(self, o) -> bool: other = o # type: ObjectType @@ -54,11 +53,24 @@ class ObjectType(object): class Object(object): + class ValueList(list): + """An auto-expanding version of list.""" + + def __setitem__(self, index, value): + if index >= len(self): + self.extend([None] * (index + 1 - len(self))) + list.__setitem__(self, index, value) + + def __getitem__(self, index): + if index >= len(self): + self.extend([None] * (index + 1 - len(self))) + return list.__getitem__(self, index) + def __init__(self, ds: "DataSet", ot: ObjectType, key: str): self._ds = ds self._ot = ot self._key = key - self._data = [] + self._data = Object.ValueList() @property def object_type(self): @@ -72,7 +84,7 @@ class Object(object): if self._ds._frozen: raise Exception("This data set is frozen") idx = self._ot.index_of(key, create=True) - self._data.insert(idx, value) + self._data[idx] = value return self @@ -115,7 +127,7 @@ class Object(object): def get(self, key: str) -> Optional[str]: idx = self._ot.index_of(key) - return self._data[idx] if idx is not None and idx < len(self._data) else None + return self._data[idx] if idx is not None else None def get_req(self, key: str) -> str: idx = self._ot.index_of(key) |