aboutsummaryrefslogtreecommitdiff
path: root/src/ee/part
diff options
context:
space:
mode:
authorTrygve Laugstøl <trygvis@inamo.no>2019-03-15 14:55:15 +0100
committerTrygve Laugstøl <trygvis@inamo.no>2019-03-15 14:55:15 +0100
commit237a6faa8a23826e68bbc00bc107b2d6f97235d0 (patch)
treefe1a6a6b1a4ed991a6eacd9ec6960325db3f9e4f /src/ee/part
parent3523190bb7ca1c38caea3a1aae51062d22e56b09 (diff)
downloadee-python-237a6faa8a23826e68bbc00bc107b2d6f97235d0.tar.gz
ee-python-237a6faa8a23826e68bbc00bc107b2d6f97235d0.tar.bz2
ee-python-237a6faa8a23826e68bbc00bc107b2d6f97235d0.tar.xz
ee-python-237a6faa8a23826e68bbc00bc107b2d6f97235d0.zip
Refactoring:
o Renaming part.id to part.uri. Changing to URIs and use that as an identifier if the part is known. Schematic part does not have an URI. o Merging <schema-reference> and <part-numbers> into <references> o Creating <part-uri> as a possible <reference>. Used by order to point to other parts.
Diffstat (limited to 'src/ee/part')
-rw-r--r--src/ee/part/__init__.py24
-rw-r--r--src/ee/part/create_distributor_search_list.py10
2 files changed, 11 insertions, 23 deletions
diff --git a/src/ee/part/__init__.py b/src/ee/part/__init__.py
index 45561ec..36a3d3c 100644
--- a/src/ee/part/__init__.py
+++ b/src/ee/part/__init__.py
@@ -1,9 +1,7 @@
from pathlib import Path
from typing import List, MutableMapping, Optional, Iterator
-from ee import EeException
from ee.xml import types, bom_file_utils
-from ee.xml.bom_file_utils import find_pn, find_dpn, find_root_tag
__all__ = [
"PartDb",
@@ -17,10 +15,10 @@ class Entry(object):
self.new = new
self.part = part
- self.pn = find_pn(part)
+ self.pn = next((p.valueProp for p in bom_file_utils.part_numbers(part)), None)
def dpn(self, uri: str):
- return find_dpn(self.part, uri)
+ return [spn for spn in bom_file_utils.supplier_part_numbers(self.part) if spn.supplierProp == uri]
class PartDb(object):
@@ -42,7 +40,7 @@ class PartDb(object):
def iterparts(self, sort=False) -> Iterator[types.Part]:
it = (e.part for e in self.parts)
- return sorted(it, key=lambda p: p.idProp) if sort else it
+ return sorted(it, key=lambda p: p.uriProp) if sort else it
def size(self) -> int:
return len(self.parts)
@@ -51,16 +49,6 @@ class PartDb(object):
entry = self.pn_index.get(pn, None)
return entry.part if entry else None
- def find_by_dpn(self, distributor: str, pn: str) -> types.Part:
- idx = self.dpn_indexes.get(distributor)
-
- if idx is None:
- tmp = [(find_dpn(entry.part, distributor), entry) for entry in self.parts]
- idx = {dpn: entry for dpn, entry in tmp if dpn is not None}
- self.dpn_indexes[distributor] = idx
-
- return idx[pn].part
-
def load_db(path: Path) -> PartDb:
db = PartDb()
@@ -76,10 +64,10 @@ def load_db(path: Path) -> PartDb:
return db
-def save_db(path: Path, db: PartDb):
+def save_db(path: Path, db: PartDb, sort=False):
part_db = types.PartDb()
parts = part_db.parts = types.PartList()
- parts.partProp.extend(db.iterparts(sort=True))
+ parts.partProp.extend(db.iterparts(sort=sort))
with path.open("w") as f:
- part_db.export(outfile=f, level=0, name_=find_root_tag(part_db))
+ part_db.export(outfile=f, level=0, name_=bom_file_utils.find_root_tag(part_db))
diff --git a/src/ee/part/create_distributor_search_list.py b/src/ee/part/create_distributor_search_list.py
index 88e5a10..10160d4 100644
--- a/src/ee/part/create_distributor_search_list.py
+++ b/src/ee/part/create_distributor_search_list.py
@@ -1,8 +1,7 @@
from pathlib import Path
from ee.part import PartDb, load_db, save_db
-from ee.xml import types
-from ee.xml.bom_file_utils import *
+from ee.xml import types, bom_file_utils
__all__ = ["create_distributor_search_list"]
@@ -14,10 +13,11 @@ def create_distributor_search_list(in_path: Path, out_path: Path):
print("loaded {} existing parts".format(in_parts.size()))
for part in in_parts.iterparts():
- pn_value = find_pn(part)
+ pn_value = next((p.valueProp for p in bom_file_utils.part_numbers(part)), None)
if pn_value is None:
- print("Skipping part with no part number: id={}".format(part.idProp))
+ # TODO: use schematic reference if found
+ print("Skipping part with no part number: uri={}".format(part.uriProp))
continue
entry = out_parts.find_by_pn(pn_value)
@@ -26,7 +26,7 @@ def create_distributor_search_list(in_path: Path, out_path: Path):
continue
new_part = types.Part(id=pn_value)
- new_part.part_numbersProp = part.part_numbersProp
+ new_part.referencesProp = part.referencesProp
out_parts.add_entry(new_part, True)