diff options
Diffstat (limited to 'src/ee/tools/import_parts_yaml.py')
-rw-r--r-- | src/ee/tools/import_parts_yaml.py | 52 |
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)) |