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()