diff bin/vidrefsetup @ 1096:087f6cbe4b22

vidrefsetup tool now prepares a url that vidref will use for rpi camera requests Ignore-this: 3b10bb845aa51811f21f63d4a280d2bd
author Drew Perttula <drewp@bigasterisk.com>
date Sun, 08 Jun 2014 09:30:03 +0000
parents
children a38955ba6f40
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bin/vidrefsetup	Sun Jun 08 09:30:03 2014 +0000
@@ -0,0 +1,70 @@
+#!bin/python
+""" this should be part of vidref, but I haven't worked out sharing
+camera captures with a continuous camera capture yet """
+
+from run_local import log
+import sys, optparse, logging, json, subprocess, datetime
+from dateutil.tz import tzlocal
+from twisted.internet import reactor, defer
+import cyclone.web, cyclone.httpclient, cyclone.websocket
+from rdflib import RDF, URIRef, Literal
+import pyjade.utils
+from light9.rdfdb.syncedgraph import SyncedGraph
+from light9.rdfdb.patch import Patch
+from light9.namespaces import L9, DCTERMS
+from light9 import networking, showconfig
+
+from lib.cycloneerr import PrettyErrorHandler
+
+class RedirToCamera(PrettyErrorHandler, cyclone.web.RequestHandler):
+    def get(self):
+        return self.redirect(networking.picamserve.path(
+            'pic?' + self.request.query))
+        
+class UrlToCamera(PrettyErrorHandler, cyclone.web.RequestHandler):
+    def get(self):
+        self.set_header('Content-Type', 'text/plain')
+        self.write(networking.picamserve.path('pic'))
+                   
+class VidrefCamRequest(PrettyErrorHandler, cyclone.web.RequestHandler):
+    def get(self):
+        graph = self.settings.graph
+        show = showconfig.showUri()
+        with graph.currentState(tripleFilter=(show, None, None)) as g:
+            ret = g.value(show, L9['vidrefCamRequest'])
+            if ret is None:
+                self.send_error(404)
+            self.redirect(ret)
+            
+    def put(self):
+        graph = self.settings.graph
+        show = showconfig.showUri()
+        graph.patchObject(context=URIRef(show + '/vidrefConfig'),
+                          subject=show,
+                          predicate=L9['vidrefCamRequest'],
+                          newObject=URIRef(self.get_argument('uri')))
+        self.send_error(202)
+
+def main():
+    parser = optparse.OptionParser()
+    parser.add_option("-v", "--verbose", action="store_true",
+                      help="logging.DEBUG")
+    (options, args) = parser.parse_args()
+
+    log.setLevel(logging.DEBUG if options.verbose else logging.INFO)
+    graph = SyncedGraph("vidrefsetup")
+
+    # deliberately conflict with vidref since they can't talk at once to cam
+    port = networking.vidref.port 
+
+    reactor.listenTCP(port, cyclone.web.Application(handlers=[
+        (r'/pic', RedirToCamera),
+        (r'/picUrl', UrlToCamera),
+        (r'/vidrefCamRequest', VidrefCamRequest),
+        (r'/static/(.*)', cyclone.web.StaticFileHandler, {'path': 'static/'}),
+        (r'/()', cyclone.web.StaticFileHandler, {'path': 'light9/vidref/', 'default_filename': 'vidref.html'}),
+        ], debug=True, graph=graph))
+    log.info("serving on %s" % port)
+    reactor.run()
+
+main()