Mercurial > code > home > repos > homeauto
changeset 916:e8cce78a79d6
switch reasoning from restkit to async cyclone http client
Ignore-this: d7b8d0dba6374315a6eba63ca13e7c69
darcs-hash:20130903035718-312f9-fd247d06bb6d1c88f1f79557e676e3c3b91e834c
author | drewp <drewp@bigasterisk.com> |
---|---|
date | Mon, 02 Sep 2013 20:57:18 -0700 |
parents | 1e7dd498fa60 |
children | 1c3cc9633a6e |
files | service/reasoning/reasoning.py |
diffstat | 1 files changed, 27 insertions(+), 20 deletions(-) [+] |
line wrap: on
line diff
--- a/service/reasoning/reasoning.py Sun Sep 01 01:43:13 2013 -0700 +++ b/service/reasoning/reasoning.py Mon Sep 02 20:57:18 2013 -0700 @@ -22,8 +22,8 @@ import time, traceback, sys, json, logging from rdflib.Graph import Graph, ConjunctiveGraph from rdflib import Namespace, URIRef, Literal, RDF, StringInputSource -import restkit from FuXi.Rete.RuleStore import N3RuleStore +from cyclone.httpclient import fetch import cyclone.web, cyclone.websocket from inference import addTrig, infer from graphop import graphEqual @@ -72,6 +72,8 @@ for fp in FilePath("input").walk(): if fp.isdir(): continue + if fp.splitext()[1] != '.n3': + continue log.debug("read %s", fp) # todo: if this fails, leave the report in the graph self._fileGraph.parse(fp.open(), format="n3") @@ -219,23 +221,31 @@ inferenceTime = time.time() - t1 out.add((ROOM['reasoner'], ROOM['inferenceTime'], - Literal(inferenceTime))) + Literal(inferenceTime))) return out def _postToMagma(self, inputGraph): - try: - inputGraphNt = inputGraph.serialize(format="nt") - inferredNt = self.inferred.serialize(format="nt") - body = json.dumps({"input": inputGraphNt, - "inferred": inferredNt}) - restkit.Resource("http://bang:8014/").post( - "reasoningChange", payload=body, - headers={"content-type" : "application/json"}) - except Exception, e: - traceback.print_exc() + + inputGraphNt = inputGraph.serialize(format="nt") + inferredNt = self.inferred.serialize(format="nt") + body = json.dumps({"input": inputGraphNt, + "inferred": inferredNt}) + def err(e): log.error("while sending changes to magma:") log.error(e) + fetch("http://bang:8014/reasoningChange", + method="POST", + timeout=2, + payload=body, + headers={"content-type" : ["application/json"]}).addErrback(err) + + def _put(self, url, payload): + def err(e): + outlog.warn("put %s falied", url) + outlog.info("PUT %s payload=%r", url, payload) + fetch(url, method="PUT", payload=payload, timeout=2).addErrback(err) + def putResults(self, inferred): """ some conclusions in the inferred graph lead to PUT requests @@ -261,8 +271,8 @@ ]: url = deviceGraph.value(dev, ROOM.putUrl) - if dev == DEV.theaterDoorLock: # ew - restkit.request(url=url+"/mode", method="PUT", body="output") + if url and dev == DEV.theaterDoorLock: # ew + self._put(url+"/mode", payload="output") inferredObjects = list(inferred.objects(dev, pred)) if len(inferredObjects) == 0: @@ -306,7 +316,7 @@ value = deviceGraph.value(dev, ROOM.zeroValue) if value is not None: outlog.info("put zero (%r) to %s", value, putUrl) - restkit.request(url=putUrl, method="PUT", body=value) + self._put(putUrl, payload=value) # this should be written back into the inferred graph # for feedback @@ -314,7 +324,7 @@ value = deviceGraph.value(obj, ROOM.putValue) if value is not None: outlog.info("put %s to %s", value, putUrl) - restkit.request(url=putUrl, method="PUT", body=value) + self._put(putUrl, payload=value) else: outlog.warn("%s %s %s has no :putValue" % (dev, pred, obj)) @@ -326,10 +336,7 @@ return url = deviceGraph.value(DEV.frontDoorLcdBrightness, ROOM.putUrl) outlog.info("put lcd %s brightness %s", url, brt) - def failed(err): - outlog.error("lcd brightness: %s", err) - getPage(str(url) + "?brightness=%s" % str(brt), - method="PUT").addErrback(failed) + self._put(str(url) + "?brightness=%s" % str(brt)) msg = "open %s motion %s" % ( inferred.value(DEV['frontDoorOpenIndicator'], ROOM.text),