From 78bc8446b18f555feb9d8c872c0848a27ceed8b9 Mon Sep 17 00:00:00 2001 From: Trygve Laugstøl Date: Sun, 8 Jan 2017 01:26:44 +0100 Subject: kicad.owl: making the model look more like kicad's own model. --- trygvis/eda/cli/make_bom.py | 108 +++++++++++++++++++++++++------------------- 1 file changed, 62 insertions(+), 46 deletions(-) (limited to 'trygvis/eda/cli/make_bom.py') 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"]}) -- cgit v1.2.3