Mercurial > code > home > repos > homeauto
view service/reasoning/inference.py @ 45:5b0f970e3d52
/status page, errors on failed graphs, time reports of successful fetches
Ignore-this: 14742f2a6237f996d7024ff4454a8057
author | drewp@bigasterisk.com |
---|---|
date | Sun, 30 Dec 2012 03:02:25 -0800 |
parents | 3f0dd03112b5 |
children | 4cd065b97fa1 |
line wrap: on
line source
""" see ./reasoning for usage """ import sys, re import restkit from rdflib import StringInputSource, URIRef from rdflib.Graph import Graph sys.path.append("/my/proj/room/fuxi/build/lib.linux-x86_64-2.6") from FuXi.Rete.Util import generateTokenSet from FuXi.Rete import ReteNetwork from rdflib import plugin from rdflib.store import Store def parseTrig(trig): """ yields quads """ m = re.match(r"<([^>]+)> \{(.*)\}\s*$", trig, re.DOTALL) if m is None: raise NotImplementedError("trig format was too tricky: %r..." % trig[:200]) ctx = URIRef(m.group(1)) n3 = m.group(2) g = Graph() g.parse(StringInputSource(n3), format="n3") for stmt in g: yield stmt + (ctx,) def infer(graph, rules): """ returns new graph of inferred statements """ # based on fuxi/tools/rdfpipe.py store = plugin.get('IOMemory',Store)() store.open('') target = Graph() tokenSet = generateTokenSet(graph) network = ReteNetwork(rules, inferredTarget=target) network.feedFactsToAdd(tokenSet) store.rollback() return target import time, logging log = logging.getLogger() def logTime(func): def inner(*args, **kw): t1 = time.time() try: ret = func(*args, **kw) finally: log.info("Call to %s took %.1f ms" % ( func.__name__, 1000 * (time.time() - t1))) return ret return inner def addTrig(graph, url): t1 = time.time() trig = restkit.request(url).body_string() fetchTime = time.time() - t1 graph.addN(parseTrig(trig)) return fetchTime