diff options
Diffstat (limited to 'trygvis/eda/cli/__init__.py')
-rw-r--r-- | trygvis/eda/cli/__init__.py | 53 |
1 files changed, 40 insertions, 13 deletions
diff --git a/trygvis/eda/cli/__init__.py b/trygvis/eda/cli/__init__.py index 8a4ce6f..f300f86 100644 --- a/trygvis/eda/cli/__init__.py +++ b/trygvis/eda/cli/__init__.py @@ -1,8 +1,9 @@ import sys import logging - from rdflib import store, ConjunctiveGraph, Graph, RDF, RDFS from rdflib.plugins.sparql import prepareQuery +import rdflib.plugins.stores.sparqlstore as sparqlstore +import configparser from ..digikey import rdf as digikey_rdf from ..kicad import rdf as kicad_rdf @@ -12,7 +13,7 @@ class CliException(Exception): pass -def init(): +def initialize(): logging.basicConfig(level=logging.DEBUG) pass @@ -27,16 +28,27 @@ 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) +def with_database(tx): + config = read_config() + + db_type = config['db']['type'] + if db_type is None or db_type == 'local': + path = ".eda-rdf/db" + 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) + elif db_type == 'sparql': + g = sparqlstore.SPARQLStore() + g.open(config["db"]["url"]) + else: + raise CliException("Unknown db.type: %s" % db_type) try: + print("g=%s" % g) tx(g) finally: g.close() @@ -70,7 +82,22 @@ _initNs = { "kicad-type": kicad_rdf.KICAD_TYPE} -def sparql(g, query, init_bindings=None): - q = prepareQuery(query, initNs=_initNs) +def sparql(g: Graph, query: str, init_bindings=None): + + if isinstance(g, sparqlstore.SPARQLStore): + return g.query(query, initNs=_initNs, initBindings=init_bindings) + else: + q = prepareQuery(query, initNs=_initNs) + return g.query(q, initBindings=init_bindings) + + +def write_config(config: configparser.ConfigParser): + with open('.eda-rdf/config.ini', 'w') as configfile: + config.write(configfile) + - return g.query(q, initBindings=init_bindings) +def read_config(): + with open('.eda-rdf/config.ini', 'r') as f: + config = configparser.ConfigParser() + config.read_file(f) + return config |