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.py108
1 files changed, 62 insertions, 46 deletions
diff --git a/trygvis/eda/cli/make_bom.py b/trygvis/eda/cli/make_bom.py
index 1023c11..4e341b8 100755
--- a/trygvis/eda/cli/make_bom.py
+++ b/trygvis/eda/cli/make_bom.py
@@ -48,45 +48,48 @@ def work(args, g):
components = {}
dk_parts = {}
- version = None
if args.version is not None:
- version = args.version
+ version_url = args.version
+ version_uuid = None
+ timestamp = None
else:
cli.info("Finding latest version")
res = cli.sparql(g, """
SELECT
-?project ?version ?timestamp
+?project ?timestamp ?version_uuid
WHERE {
- ?project a kicad:project .
- ?version a kicad:project-version;
- kicad:timestamp ?timestamp;
- kicad:version-of ?project
+ ?project a kicad:project ;
+ kicad:timestamp ?timestamp ;
+ kicad:version-uuid ?version_uuid ;
+ kicad:version-of ?orig_project
.
}
ORDER BY DESC(?timestamp)
LIMIT 1
-""", init_bindings={"project": rdflib.URIRef(project_url)})
+""", init_bindings={"orig_project": rdflib.URIRef(project_url)})
for row in res:
- version = row.version
+ version_url = row.project
+ version_uuid = row.version_uuid
+ timestamp = row.timestamp
break
else:
raise EdaException("Could not find any version of project %s" % project_url)
- cli.info("Loading components for version %s" % version)
+ cli.info("Loading components for version %s, uuid=%s, timestamp=%s" % (version_url, version_uuid, timestamp))
res = cli.sparql(g, """
SELECT
?ref ?value
WHERE {
- ?version a kicad:project-version ;
+ ?version a kicad:project ;
kicad:component ?cmp .
?cmp a kicad:component ;
kicad:value ?value ;
rdfs:label ?ref .
}
ORDER BY ?ref
-""", init_bindings={"version": rdflib.URIRef(version)})
+""", init_bindings={"version": rdflib.URIRef(version_url)})
for row in res:
c = Component(row.ref, row.value)
@@ -101,18 +104,22 @@ ORDER BY ?ref
SELECT
?ref ?field ?field_name ?field_value
WHERE {
- ?version a kicad:project-version ;
+ ?version a kicad:project ;
kicad:component ?cmp .
+
?cmp a kicad:component ;
rdfs:label ?ref ;
kicad:field ?field .
- ?field a kicad:field ; kicad:field_name ?field_name .
- ?field a kicad:field ; kicad:field_value ?field_value .
+
+ ?field a kicad:field ;
+ kicad:field-name ?field_name ;
+ kicad:field-value ?field_value .
}
ORDER BY ?ref ?field_name
-""", init_bindings={"version": rdflib.URIRef(version)})
+""", init_bindings={"version": rdflib.URIRef(version_url)})
for row in res:
+ # cli.debug('row: %s' % str(row))
c = components[row.ref]
assert isinstance(c, Component)
c.set_field(row.field_name, row.field_value)
@@ -123,23 +130,28 @@ ORDER BY ?ref ?field_name
SELECT
?ref ?part_number ?type ?value ?attr_type
WHERE {
- ?project kicad:component ?cmp .
- ?cmp a kicad:component ;
- rdfs:label ?ref ;
- kicad:field ?d .
- ?d kicad:field_name "digikey" ;
- kicad:field_value ?part_number .
- ?part a dk:part ;
- rdfs:label ?label ;
+ ?version a kicad:project ;
+ kicad:component ?cmp .
+
+ ?cmp a kicad: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 .
+
+ ?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={"project": rdflib.URIRef(project_url)})
+""", init_bindings={"version": rdflib.URIRef(version_url)})
for row in res:
pn = row.part_number
@@ -159,24 +171,28 @@ SELECT
?ref ?footprint ?part_number ?package_value ?case_value
# *
WHERE {
- ?project kicad:component ?cmp .
- ?cmp a kicad:component ;
- rdfs:label ?ref ;
- kicad:field ?dk_field .
- optional {
- ?cmp kicad:footprint ?footprint_url .
- ?footprint_url rdfs:label ?footprint .
- } .
- ?dk_field kicad:field_name "digikey" ;
- kicad:field_value ?part_number .
- ?part a dk:part ;
+ ?version a kicad:project ;
+ kicad:component ?cmp .
+
+ ?cmp a kicad:component ;
+ rdfs:label ?ref ;
+ kicad:field ?dk_field .
+
+ optional {
+ ?cmp kicad:footprint ?footprint_url .
+ ?footprint_url rdfs:label ?footprint .
+ } .
+
+ ?dk_field kicad:field-name "digikey" ;
+ kicad:field-value ?part_number .
+ ?part a dk:part ;
dk:partNumber ?part_number .
- optional {
- ?part dk:attribute-value ?package_url .
- ?package_url rdfs:label ?package_value .
- ?package_type a dk:attributeType ; dk:value ?package_url .
- } .
+ optional {
+ ?part dk:attribute-value ?package_url .
+ ?package_url rdfs:label ?package_value .
+ ?package_type a dk:attributeType ; dk:value ?package_url .
+ } .
# optional {
# ?part dk:attribute-value ?case_url .
@@ -189,7 +205,7 @@ WHERE {
# VALUES (?case_type) { (dk-attr-type:pv1291) } .
}
ORDER BY ?ref
-""", init_bindings={"project": rdflib.URIRef(project_url),
+""", init_bindings={"version": rdflib.URIRef(version_url),
"package_type": digikey_rdf.DIGIKEY_ATTRIBUTE_TYPE["pv16"],
"cast_type": digikey_rdf.DIGIKEY_ATTRIBUTE_TYPE["pv1291"]})