Mercurial > code > home > repos > homeauto
comparison service/piNode/piNode.py @ 184:e052416a2290
piNode allow nt graphs as the body of a PUT /output
Ignore-this: 248ba89b8b1c130d86cd068c344238ba
author | drewp@bigasterisk.com |
---|---|
date | Thu, 18 Jun 2015 01:45:07 -0700 |
parents | 634d6e477953 |
children | fb23df31b642 |
comparison
equal
deleted
inserted
replaced
183:634d6e477953 | 184:e052416a2290 |
---|---|
1 from __future__ import division | 1 from __future__ import division |
2 import sys, logging, socket, json | 2 import sys, logging, socket, json |
3 import cyclone.web | 3 import cyclone.web |
4 from rdflib import Namespace, URIRef, Literal, Graph, RDF | 4 from rdflib import Namespace, URIRef, Literal, Graph, RDF |
5 from rdflib.parser import StringInputSource | |
5 from twisted.internet import reactor, task | 6 from twisted.internet import reactor, task |
6 from docopt import docopt | 7 from docopt import docopt |
7 logging.basicConfig(level=logging.DEBUG) | 8 logging.basicConfig(level=logging.DEBUG) |
8 sys.path.append("/my/site/magma") | 9 sys.path.append("/my/site/magma") |
9 sys.path.append("../../../../site/magma") | 10 sys.path.append("../../../../site/magma") |
101 'uri': self.uri, | 102 'uri': self.uri, |
102 'devices': [d.description() for d in self._devs], | 103 'devices': [d.description() for d in self._devs], |
103 'graph': 'http://sticker:9059/graph', #todo | 104 'graph': 'http://sticker:9059/graph', #todo |
104 } | 105 } |
105 | 106 |
107 def rdfGraphBody(body, headers): | |
108 g = Graph() | |
109 g.parse(StringInputSource(body), format='nt') | |
110 return g | |
106 | 111 |
107 class OutputPage(cyclone.web.RequestHandler): | 112 class OutputPage(cyclone.web.RequestHandler): |
108 def put(self): | 113 def put(self): |
109 subj = URIRef(self.get_argument('s')) | 114 arg = self.request.arguments |
110 pred = URIRef(self.get_argument('p')) | 115 if arg.get('s') and arg.get('p'): |
116 subj = URIRef(arg['s'][-1]) | |
117 pred = URIRef(arg['p'][-1]) | |
118 turtleLiteral = self.request.body | |
119 try: | |
120 obj = Literal(float(turtleLiteral)) | |
121 except ValueError: | |
122 obj = Literal(turtleLiteral) | |
123 stmt = (subj, pred, obj) | |
124 else: | |
125 g = rdfGraphBody(self.request.body, self.request.headers) | |
126 assert len(g) == 1, len(g) | |
127 stmt = g.triples((None, None, None)).next() | |
111 | 128 |
112 turtleLiteral = self.request.body | |
113 try: | |
114 obj = Literal(float(turtleLiteral)) | |
115 except ValueError: | |
116 obj = Literal(turtleLiteral) | |
117 | |
118 stmt = (subj, pred, obj) | |
119 self.settings.board.outputStatements([stmt]) | 129 self.settings.board.outputStatements([stmt]) |
120 | 130 |
121 class Boards(cyclone.web.RequestHandler): | 131 class Boards(cyclone.web.RequestHandler): |
122 def get(self): | 132 def get(self): |
123 self.set_header('Content-type', 'application/json') | 133 self.set_header('Content-type', 'application/json') |
155 (r'/static/(.*)', cyclone.web.StaticFileHandler, {"path": "../arduinoNode/static"}), | 165 (r'/static/(.*)', cyclone.web.StaticFileHandler, {"path": "../arduinoNode/static"}), |
156 (r"/graph", GraphPage), | 166 (r"/graph", GraphPage), |
157 (r'/output', OutputPage), | 167 (r'/output', OutputPage), |
158 (r'/boards', Boards), | 168 (r'/boards', Boards), |
159 #(r'/dot', Dot), | 169 #(r'/dot', Dot), |
160 ], config=config, board=board)) | 170 ], config=config, board=board, debug=arg['-v'])) |
161 reactor.run() | 171 reactor.run() |
162 | 172 |
163 main() | 173 main() |