From b4eeed35d78f82ea988d70de177d522ca20257ea Mon Sep 17 00:00:00 2001 From: Trygve Laugstøl Date: Fri, 14 Jun 2019 21:42:18 +0200 Subject: bom-to-csv: Starting on a generic tool to generate CSV files from BOMs. --- src/ee/tools/bom_to_csv.py | 55 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 src/ee/tools/bom_to_csv.py (limited to 'src/ee/tools/bom_to_csv.py') 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) -- cgit v1.2.3