diff service/mqtt_graph_bridge/mqtt_graph_bridge.py @ 694:925bc4137c93

extract rdfStatementsFromRequest for sharing with other tools Ignore-this: 74eba63f3a29f48b48c6fb1ae74780d3
author drewp@bigasterisk.com
date Fri, 31 Jan 2020 23:54:20 -0800
parents e1ee6661329a
children c52b172c0824
line wrap: on
line diff
--- a/service/mqtt_graph_bridge/mqtt_graph_bridge.py	Wed Jan 29 01:05:15 2020 -0800
+++ b/service/mqtt_graph_bridge/mqtt_graph_bridge.py	Fri Jan 31 23:54:20 2020 -0800
@@ -7,14 +7,14 @@
 import json
 
 from docopt import docopt
-from rdflib import Namespace, URIRef, Literal, Graph
-from rdflib.parser import StringInputSource
+from rdflib import Namespace, Literal
 from twisted.internet import reactor
 import cyclone.web
 
 from mqtt_client import MqttClient
 from patchablegraph import PatchableGraph, CycloneGraphHandler, CycloneGraphEventsHandler
 from standardservice.logsetup import log, verboseLogging
+import rdf_over_http
 
 ROOM = Namespace('http://projects.bigasterisk.com/room/')
 
@@ -29,30 +29,17 @@
     },
 }
 
-def rdfGraphBody(body, headers):
-    g = Graph()
-    g.parse(StringInputSource(body), format='nt')
-    return g
 
 class OutputPage(cyclone.web.RequestHandler):
     def put(self):
-        arg = self.request.arguments
-        if arg.get('s') and arg.get('p'):
-            subj = URIRef(arg['s'][-1])
-            pred = URIRef(arg['p'][-1])
-            turtleLiteral = self.request.body
-            try:
-                obj = Literal(float(turtleLiteral))
-            except ValueError:
-                obj = Literal(turtleLiteral)
-            stmt = (subj, pred, obj)
-        else:
-            g = rdfGraphBody(self.request.body, self.request.headers)
-            assert len(g) == 1, len(g)
-            stmt = g.triples((None, None, None)).next()
-        self._onStatement(stmt)
-            
+        for stmt in rdf_over_http.rdfStatementsFromRequest(
+                self.request.arguments,
+                self.request.body,
+                self.request.headers):
+            self._onStatement(stmt)
+
     def _onStatement(self, stmt):
+        log.info(f'incoming statement: {stmt}')
         ignored = True
         for dev, attrs in devs.items():
             if stmt[0:2] == (dev, ROOM['brightness']):
@@ -100,5 +87,5 @@
     for dev, attrs in devs.items():
         masterGraph.patchObject(attrs['ctx'],
                                 dev, ROOM['brightness'], Literal(0.0))
-    
+
     reactor.run()