import sys import logging from rdflib import store, ConjunctiveGraph, Graph, RDF, RDFS from rdflib.plugins.sparql import prepareQuery from ..digikey import rdf as digikey_rdf from ..kicad import rdf as kicad_rdf class CliException(Exception): pass def init(): logging.basicConfig(level=logging.DEBUG) pass def info(msg=None): if msg is not None: sys.stderr.write(msg) sys.stderr.write("\n") def do_exit(msg=None): sys.exit(msg) def with_database(path, tx): g = ConjunctiveGraph('Sleepycat') rt = g.open(path, create=False) if rt == store.NO_STORE: info("Creating store in %s" % path) g.open(path, create=True) elif rt != store.VALID_STORE: raise CliException("The database is corrupt: %s" % path) try: tx(g) finally: g.close() def create_graph(digikey=False, kicad=False): g = Graph() if digikey: g.bind("dk", digikey_rdf.DIGIKEY) g.bind("dk-part", digikey_rdf.DIGIKEY_PART) g.bind("dk-attr-type", digikey_rdf.DIGIKEY_ATTRIBUTE_TYPE) g.bind("dk-attr-value", digikey_rdf.DIGIKEY_ATTRIBUTE_VALUE) g.bind("dk-product-category", digikey_rdf.DIGIKEY_PRODUCT_CATEGORY) if kicad: g.bind("kicad", kicad_rdf.KICAD) g.bind("kicad-type", kicad_rdf.KICAD_TYPE) return g _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 sparql(g, query, init_bindings=None): q = prepareQuery(query, initNs=_initNs) return g.query(q, initBindings=init_bindings)