aboutsummaryrefslogtreecommitdiff
path: root/trygvis/eda/cli/make_bom.py
diff options
context:
space:
mode:
Diffstat (limited to 'trygvis/eda/cli/make_bom.py')
-rwxr-xr-xtrygvis/eda/cli/make_bom.py120
1 files changed, 102 insertions, 18 deletions
diff --git a/trygvis/eda/cli/make_bom.py b/trygvis/eda/cli/make_bom.py
index 28059cb..39d664b 100755
--- a/trygvis/eda/cli/make_bom.py
+++ b/trygvis/eda/cli/make_bom.py
@@ -1,21 +1,105 @@
from trygvis.eda import cli
-from trygvis.eda.digikey import *
-from trygvis.eda.digikey import rdf as digikey_rdf
-from trygvis.eda.kicad import rdf as kicad_rdf
-
-initNs = {
- "rdf": RDF,
- "rdfs": RDFS,
- "dk": digikey_rdf.DIGIKEY,
- "dk-attr-type": digikey_rdf.DIGIKEY_ATTRIBUTE_TYPE,
- "dk-attr-value": digikey_rdf.DIGIKEY_ATTRIBUTE_VALUE,
- "dk-part": digikey_rdf.DIGIKEY_PART,
- "dk-p-c": digikey_rdf.DIGIKEY_PRODUCT_CATEGORY,
- "kicad": kicad_rdf.KICAD,
- "kicad-type": kicad_rdf.KICAD_TYPE}
-
-
-def run(schematic_url, db_path, args):
+import rdflib
+
+
+class DigiKeyPart(object):
+ def __init__(self, part_number):
+ self.part_number = part_number
+ self.attributes = {}
+
+ def set_attribute(self, key, value):
+ self.attributes[key] = value
+
+
+class Component(object):
+ def __init__(self, ref, value):
+ self.ref = ref
+ self.value = value
+ self.fields = {}
+
+ def set_field(self, field_name, field_value):
+ self.fields[field_name] = field_value
+
+
+def run(schematic_url, db_path):
g = cli.open_database(db_path)
- cli.info('implement..')
+ components = {}
+ dkParts = {}
+
+ cli.info("Loading components")
+
+ res = cli.sparql(g, """
+SELECT
+ ?ref ?value
+WHERE {
+ ?schematic a kicad-type:schematic ;
+ kicad:component ?cmp .
+ ?cmp a kicad-type:schematic_component ;
+ kicad:value ?value ;
+ rdfs:label ?ref .
+}
+ORDER BY ?ref
+""", init_bindings={"schematic": rdflib.URIRef(schematic_url)})
+
+ for row in res:
+ c = Component(row.ref, row.value)
+ components[row.ref] = c
+ cli.info('ref=%s, value=%s' % (c.ref, c.value))
+
+ cli.info("Loading custom component attributes")
+ res = cli.sparql(g, """
+SELECT
+ ?ref ?field ?field_name ?field_value
+WHERE {
+ ?schematic a kicad-type:schematic ;
+ kicad:component ?cmp .
+ ?cmp a kicad-type:schematic_component ;
+ rdfs:label ?ref ;
+ kicad:field ?field .
+ ?field a kicad-type:field ; kicad:field_name ?field_name .
+ ?field a kicad-type:field ; kicad:field_value ?field_value .
+}
+ORDER BY ?ref ?field_name
+""", init_bindings={"schematic": rdflib.URIRef(schematic_url)})
+
+ for row in res:
+ c = components[row.ref]
+ assert isinstance(c, Component)
+ c.set_field(row.field_name, row.field_value)
+ cli.info('%5s: %-20s %s' % (c.ref, row.field_name + ':', row.field_value))
+
+ cli.info("Loading Digi-Key parts for schematic")
+ res = cli.sparql(g, """
+SELECT
+?ref ?part_number ?type ?value
+WHERE {
+ ?schematic kicad:component ?cmp .
+ ?cmp a kicad-type:schematic_component ;
+ rdfs:label ?ref ;
+ kicad:field ?d .
+ ?d kicad:field_name "digikey" ;
+ kicad:field_value ?part_number .
+ ?part a dk:part ;
+ rdfs:label ?label ;
+ dk:partNumber ?part_number ;
+ dk:attribute-value ?attr_value .
+ ?attr_value rdfs:label ?value .
+ ?attr_type a dk:attributeType ;
+ rdfs:label ?type ;
+ dk:value ?attr_value .
+}
+ORDER BY ?ref ?attr_type ?attr_value
+""", init_bindings={"schematic": rdflib.URIRef(schematic_url)})
+
+ for row in res:
+ pn = row.part_number
+
+ if not hasattr(dkParts, pn):
+ part = DigiKeyPart(pn)
+ dkParts[pn] = part
+ else:
+ part = dkParts[pn]
+
+ part.set_attribute(row.type, row.value)
+ cli.info('%5s: %-20s %s' % (pn, row.type + ':', row.value))