aboutsummaryrefslogtreecommitdiff
path: root/src/ee/tools/bom_to_csv.py
diff options
context:
space:
mode:
authorTrygve Laugstøl <trygvis@inamo.no>2019-06-14 21:42:18 +0200
committerTrygve Laugstøl <trygvis@inamo.no>2019-06-14 21:42:18 +0200
commitb4eeed35d78f82ea988d70de177d522ca20257ea (patch)
treef5db959036edee3c292e906d1ac40a66bd8c2e2b /src/ee/tools/bom_to_csv.py
parent89197dad4f5f427faa7fba12971b20037ad5ba71 (diff)
downloadee-python-b4eeed35d78f82ea988d70de177d522ca20257ea.tar.gz
ee-python-b4eeed35d78f82ea988d70de177d522ca20257ea.tar.bz2
ee-python-b4eeed35d78f82ea988d70de177d522ca20257ea.tar.xz
ee-python-b4eeed35d78f82ea988d70de177d522ca20257ea.zip
bom-to-csv: Starting on a generic tool to generate CSV files from BOMs.
Diffstat (limited to 'src/ee/tools/bom_to_csv.py')
-rw-r--r--src/ee/tools/bom_to_csv.py55
1 files changed, 55 insertions, 0 deletions
diff --git a/src/ee/tools/bom_to_csv.py b/src/ee/tools/bom_to_csv.py
new file mode 100644
index 0000000..181eb4e
--- /dev/null
+++ b/src/ee/tools/bom_to_csv.py
@@ -0,0 +1,55 @@
+import argparse
+import csv
+from pathlib import Path
+
+import ee.tools
+from ee.part.bom import load_bom, check_bom, generate_bom, join_refs
+
+parser = argparse.ArgumentParser()
+ee.tools.add_default_argparse_group(parser)
+
+parser.add_argument("--bom",
+ required=True,
+ metavar="PART DB")
+
+parser.add_argument("--out",
+ required=True,
+ metavar="CSV")
+
+parser.add_argument("--part-db",
+ nargs="*",
+ required=True,
+ metavar="PART DB")
+
+parser.add_argument("--allow-incomplete",
+ default=False,
+ action="store_true")
+
+args = parser.parse_args()
+ee.tools.process_default_argparse_group(args)
+
+bom_path = Path(args.bom)
+part_files = [Path(p) for p in args.part_db]
+out_path = Path(args.out)
+
+bom_parts, supplier_parts = load_bom(bom_path, part_files)
+check_bom(bom_parts, supplier_parts)
+
+lines = generate_bom(args.allow_incomplete, bom_parts, supplier_parts)
+
+if lines is not None:
+ with out_path.open("w") as f:
+ w = csv.writer(f)
+ w.writerow(["Quantity", "MPN", "SPN", "References"])
+
+ for line in lines:
+ mpn = line.part.get_only_mpn()
+ spn = line.part.get_only_spn()
+
+ row = [
+ str(len(line.refs)),
+ mpn.valueProp if mpn else "",
+ spn.valueProp if spn else "",
+ join_refs(line.refs),
+ ]
+ w.writerow(row)