aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/ee/part/__init__.py11
-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.py4
-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.j231
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