diff options
Diffstat (limited to 'src/ee/tools/split_bom_by_supplier.py')
-rw-r--r-- | src/ee/tools/split_bom_by_supplier.py | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/src/ee/tools/split_bom_by_supplier.py b/src/ee/tools/split_bom_by_supplier.py new file mode 100644 index 0000000..01a6ef3 --- /dev/null +++ b/src/ee/tools/split_bom_by_supplier.py @@ -0,0 +1,86 @@ +import argparse +from pathlib import Path +from typing import List, Tuple + +import ee.tools +from ee.db import ObjDb +from ee.logging import log +from ee.part import Part, load_db, save_db, PartDb +from ee.part.bom import load_bom, check_bom + + +class OrderPart(object): + def __init__(self, order_part: Part, part: Part): + self.order_part = order_part + self.part = part + + +def split_bom_by_supplier(bom_path: Path, part_files: List[Path], supplier_list: List[Tuple[str, str, Path]]): + # key, url, file + + bom_parts, supplier_parts = load_bom(bom_path, part_files) + check_bom(bom_parts, supplier_parts) + + uri_idx = supplier_parts.index("uri") + + for supplier, uri, path in supplier_list: + print(supplier, uri, path) + + supplier_info = {uri: path for _, uri, path in supplier_list} + part_dbs = {uri: PartDb() for _, uri, _ in supplier_list} + + for bom_part in bom_parts.values: + sch = bom_part.get_exactly_one_schematic_reference().referenceProp + part_reference = bom_part.get_only_part_reference() + + if not part_reference: + # log.warn("Missing part for {}, allowing for now".format(sch)) + continue + + # print("{}: {}".format(sch, part_reference.part_uriProp)) + part = uri_idx.get_single(part_reference.part_uriProp) + print("{}: {}".format(sch, part.uri)) + print("{}: {}".format(sch, part.supplier)) + + part_dbs[part.supplier].add_entry(bom_part, new=False) + + for uri, path in supplier_info.items(): + part_db = part_dbs[uri] + save_db(path, part_db) + + +parser = argparse.ArgumentParser() +ee.tools.add_default_argparse_group(parser) + +parser.add_argument("--bom", + required=True, + metavar="PART DB") + +parser.add_argument("--part-db", + nargs="*", + required=True, + metavar="PART DB") + +parser.add_argument("--supplier", + required=True, + nargs="*", + metavar="SUPPLIER") + +parser.add_argument("--order", + required=True, + nargs="*", + metavar="PART DB") + +args = parser.parse_args() +ee.tools.process_default_argparse_group(args) + +ss = [] + +order_files = {o.split("=", maxsplit=1)[0]: o.split("=", maxsplit=1)[1] for o in args.order} + +for s in args.supplier: + key, url = s.split("=", maxsplit=1) + file = order_files[key] + ss.append((key, url, Path(file))) + +split_bom_by_supplier(Path(args.bom), [Path(path) for path in args.part_db], ss) |