aboutsummaryrefslogtreecommitdiff
path: root/src/ee/tools/import_parts_yaml.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/ee/tools/import_parts_yaml.py')
-rw-r--r--src/ee/tools/import_parts_yaml.py52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/ee/tools/import_parts_yaml.py b/src/ee/tools/import_parts_yaml.py
new file mode 100644
index 0000000..81a23f8
--- /dev/null
+++ b/src/ee/tools/import_parts_yaml.py
@@ -0,0 +1,52 @@
+import argparse
+import sys
+import yaml
+from pathlib import Path
+
+from ee.part import PartDb, save_db
+from ee.xml import bomFile
+
+
+def import_parts_yaml(in_file: Path, out_dir: Path):
+ with in_file.open("r") as f:
+ doc = yaml.safe_load(f)
+
+ if not isinstance(doc, list):
+ print("Bad YAML document, the root must be a list", file=sys.stderr)
+
+ parts = PartDb()
+ for item in doc:
+ if not isinstance(item, dict):
+ print("Bad YAML document, each part must be a dict", file=sys.stderr)
+ return
+
+ part_number_list = bomFile.PartNumberList()
+
+ mpn = item.get("mpn")
+ assert isinstance(mpn, str)
+ part_number_list.part_number.append(bomFile.PartNumber(value=mpn))
+
+ id_ = mpn
+
+ part = bomFile.Part(id=id_)
+ part.part_numbersProp = part_number_list
+ parts.add_entry(part, True)
+
+ print("Imported {} parts".format(parts.size()))
+ save_db(out_dir, parts)
+
+
+parser = argparse.ArgumentParser()
+
+parser.add_argument("--in",
+ dest="in_",
+ required=True,
+ metavar="PARTS_YAML")
+
+parser.add_argument("--out",
+ required=True,
+ metavar="PART_ DB")
+
+args = parser.parse_args()
+
+import_parts_yaml(Path(args.in_), Path(args.out))