aboutsummaryrefslogtreecommitdiff
path: root/src/ee/tools/split_parts_by_supplier.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/ee/tools/split_parts_by_supplier.py')
-rw-r--r--src/ee/tools/split_parts_by_supplier.py69
1 files changed, 69 insertions, 0 deletions
diff --git a/src/ee/tools/split_parts_by_supplier.py b/src/ee/tools/split_parts_by_supplier.py
new file mode 100644
index 0000000..1ebf094
--- /dev/null
+++ b/src/ee/tools/split_parts_by_supplier.py
@@ -0,0 +1,69 @@
+import argparse
+from pathlib import Path
+from typing import List
+
+from ee.db import ObjDb
+from ee.part import Part, load_db, save_db, PartDb
+from ee.project import Project
+
+
+class OrderPart(object):
+ def __init__(self, order_part: Part, part: Part):
+ self.order_part = order_part
+ self.part = part
+
+
+def uri_fn(part: Part):
+ return part.uri
+
+
+def split_parts_by_supplier(project: Project, order_file: Path, part_dbs: List[Path], out_dir: Path):
+ parts: ObjDb[Part] = ObjDb[Part]()
+ part_by_uri = parts.add_unique_index("uri", uri_fn)
+
+ for part_db in part_dbs:
+ for xml in load_db(part_db).iterparts():
+ parts.add(Part(xml))
+
+ order_parts: ObjDb[OrderPart] = ObjDb()
+ supplier_idx = order_parts.add_index("supplier", lambda op: op.part.supplier)
+ for xml in load_db(order_file).iterparts():
+ order_part = Part(xml)
+ part = part_by_uri.get_single(order_part.get_exactly_one_part_reference().part_uriProp)
+ order_parts.add(OrderPart(order_part, part))
+
+ for supplier, parts_for_supplier in supplier_idx.items():
+ desc = project.get_supplier_by_uri(supplier)
+
+ print("{}: {}".format(desc.name, len(parts)))
+ # supplier_db: ObjDb[Part] = ObjDb[Part]()
+ # supplier_db.add_unique_index("uri", uri_fn)
+
+ supplier_descriptor = project.get_supplier_by_uri(supplier)
+
+ db = PartDb()
+ for part_for_supplier in parts_for_supplier:
+ db.add_entry(part_for_supplier.part.underlying, False)
+
+ save_db(out_dir / "{}.xml".format(supplier_descriptor.key), db, sort=True)
+
+
+parser = argparse.ArgumentParser()
+
+parser.add_argument("--parts",
+ required=True,
+ metavar="PART DB")
+
+parser.add_argument("--part-db",
+ nargs="*",
+ required=True,
+ metavar="PART DB")
+
+parser.add_argument("--out-dir",
+ metavar="DIR FOR PART DBS")
+
+args = parser.parse_args()
+
+part_db_dirs = [Path(part_db) for part_db in args.part_db]
+
+split_parts_by_supplier(Project.load(), Path(args.parts), part_db_dirs, Path(args.out_dir))