diff options
-rw-r--r-- | src/ee/part/__init__.py | 11 | ||||
-rw-r--r-- | src/ee/part/pn_part_search_list.py (renamed from src/ee/part/create_distributor_search_list.py) | 8 | ||||
-rw-r--r-- | src/ee/tools/ninja.py | 4 | ||||
-rw-r--r-- | src/ee/tools/pn_part_search_list.py (renamed from src/ee/tools/part_create_distributor_search_list.py) | 8 | ||||
-rw-r--r-- | src/ee/tools/templates/build.ninja.j2 | 31 |
5 files changed, 43 insertions, 19 deletions
diff --git a/src/ee/part/__init__.py b/src/ee/part/__init__.py index 7a58f75..fbf0838 100644 --- a/src/ee/part/__init__.py +++ b/src/ee/part/__init__.py @@ -56,6 +56,17 @@ class Part(object): def get_part_references(self) -> List[types.PartReference]: return self.xml.referencesProp.part_referenceProp + def get_exactly_one_part_reference(self) -> types.PartReference: + refs = self.get_part_references() + if len(refs) == 0: + raise EeException("This part does not contain any part references{}". + format(", uri=" + self.uri if self.uri else "")) + if len(refs) != 1: + raise EeException("This part does not contain exactly one part reference: {}". + format(", ".join([ref.part_uriProp for ref in refs]))) + + return refs[0] + # Schematic references def add_schematic_reference(self, ref): diff --git a/src/ee/part/create_distributor_search_list.py b/src/ee/part/pn_part_search_list.py index 8d70e3e..049d0b8 100644 --- a/src/ee/part/create_distributor_search_list.py +++ b/src/ee/part/pn_part_search_list.py @@ -3,18 +3,18 @@ from pathlib import Path from ee.part import PartDb, load_db, save_db, Part, fact_keys from ee.xml import types -__all__ = ["create_distributor_search_list"] +__all__ = ["pn_part_search_list"] ignored_part_classes = [ "mechanical" ] -def create_distributor_search_list(in_path: Path, out_path: Path): +def pn_part_search_list(in_path: Path, out_path: Path, supplier: str): in_parts = load_db(in_path) out_parts = PartDb() - print("loaded {} existing parts".format(in_parts.size())) + # print("loaded {} existing parts".format(in_parts.size())) for xml in in_parts.iterparts(): part = Part(xml) @@ -40,5 +40,5 @@ def create_distributor_search_list(in_path: Path, out_path: Path): out_parts.add_entry(new_part, True) - print("Saving {} work parts".format(out_parts.size())) + # print("Saving {} work parts".format(out_parts.size())) save_db(out_path, out_parts) diff --git a/src/ee/tools/ninja.py b/src/ee/tools/ninja.py index c53b5da..2c8a88a 100644 --- a/src/ee/tools/ninja.py +++ b/src/ee/tools/ninja.py @@ -2,7 +2,7 @@ import argparse import os.path import sys from pathlib import Path -from typing import List, Union, Optional +from typing import List, Union from jinja2 import Environment, PackageLoader, select_autoescape @@ -92,7 +92,7 @@ def generate(project: Project): # Local part databases first part_dbs.extend([parent_dir_filter(p) / noext_filter(p) for p in parts_yaml_files]) - part_dbs.extend([Path("ee") / d / "normalized" for d in distributors]) + part_dbs.extend([Path("ee") / d / "parts" for d in distributors]) with build_ninja.open("w") as f: env = _create_env() diff --git a/src/ee/tools/part_create_distributor_search_list.py b/src/ee/tools/pn_part_search_list.py index 273b6d3..f82808c 100644 --- a/src/ee/tools/part_create_distributor_search_list.py +++ b/src/ee/tools/pn_part_search_list.py @@ -1,7 +1,7 @@ import argparse from pathlib import Path -from ee.part.create_distributor_search_list import create_distributor_search_list +from ee.part.pn_part_search_list import pn_part_search_list parser = argparse.ArgumentParser() @@ -14,6 +14,10 @@ parser.add_argument("--out", required=True, metavar="PART DB") +parser.add_argument("--supplier", + required=True, + metavar="SUPPLIER") + args = parser.parse_args() -create_distributor_search_list(Path(args.in_path), Path(args.out)) +pn_part_search_list(Path(args.in_path), Path(args.out), args.supplier) diff --git a/src/ee/tools/templates/build.ninja.j2 b/src/ee/tools/templates/build.ninja.j2 index 23bef37..ea979da 100644 --- a/src/ee/tools/templates/build.ninja.j2 +++ b/src/ee/tools/templates/build.ninja.j2 @@ -21,9 +21,9 @@ rule kicad-make-bom description = kicad-make-bom $out command = $ee kicad-make-bom --sch $sch --out $out $strategy -rule part-create-distributor-search-list - description = part-create-distributor-search-list distributor: $distributor - command = $ee part-create-distributor-search-list --in $in --out $out +rule pn-part-search-list + description = pn-part-search-list supplier: $supplier + command = $ee pn-part-search-list --in $in --out $out --supplier $supplier rule digikey-search-parts description = digikey-search-parts @@ -45,6 +45,10 @@ rule create-bom description = create-bom command = $ee create-bom --schematic $schematic --part-db $part_dbs --out $out $strategy +rule export-order + description = export-order + command = $ee export-order --order $order $part_dbs --out-dir $out_dir + rule import-parts-yaml description = import-parts-yaml $in command = $ee import-parts-yaml --in $in --out $out @@ -61,16 +65,16 @@ build ee/sch.xml: kicad-make-bom $sch strategy = --strategy {{ project.cfg["kicad-project"]["strategy"] }} {%- endif %} {%- endif %} -{% for d in distributors %} -# Distributor {{ d }} -build ee/{{ d }}/search-list.xml: part-create-distributor-search-list ee/sch.xml - distributor = {{ d }} +{% for s in distributors %} +# Supplier {{ s }} +build ee/{{ s }}/search-list.xml: pn-part-search-list ee/sch.xml + supplier = {{ s }} -build ee/{{ d }}/downloaded.xml: {{ d }}-search-parts ee/{{ d }}/search-list.xml +build ee/{{ s }}/downloaded.xml: {{ s }}-search-parts ee/{{ s }}/search-list.xml -build ee/{{ d }}/normalized.xml: {{ d }}-normalize-facts ee/{{ d }}/downloaded.xml +build ee/{{ s }}/parts.xml: {{ s }}-normalize-facts ee/{{ s }}/downloaded.xml -default ee/{{ d }}/normalized.xml +default ee/{{ s }}/parts.xml {%- endfor %} {%- for f in parts_yaml_files %} @@ -86,7 +90,12 @@ build ee/bom.xml | $report_dir/bom.rst: create-bom ee/sch.xml {%- for p in part_ strategy = --strategy {{ project.cfg["create-bom"]["strategy"] }} {%- endif %} -default ee/bom.xml +build ee/orders/index.xml: export-order ee/bom.xml {%- for p in part_dbs %} {{ p }}.xml{% endfor %} + order = ee/bom.xml + part_dbs ={%- for p in part_dbs %} --part-db {{ p }}.xml{% endfor %} + out_dir = ee/orders + +default ee/orders/index.xml rule seeed-download-opl description = seeed-download-opl $opl |