view bin/vidrefsetup @ 1939:6f49dc917aa3

start vidref web version. v4l camera frames to web page is working Ignore-this: 34bcc3b6149a1a3bed31aa5f32a4ddc6
author Drew Perttula <drewp@bigasterisk.com>
date Mon, 03 Jun 2019 09:50:29 +0000
parents 3c523c71da29
children
line wrap: on
line source

#!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 optparse, logging
from twisted.internet import reactor
import cyclone.web, cyclone.httpclient, cyclone.websocket
from rdflib import URIRef
from rdfdb.syncedgraph import SyncedGraph
from light9.namespaces import L9
from light9 import networking, showconfig

from 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(networking.rdfdb.url, "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'/()', cyclone.web.StaticFileHandler, {
                'path': 'light9/vidref/',
                'default_filename': 'vidref.html'
            }),
        ],
                                debug=True,
                                graph=graph))
    log.info("serving on %s" % port)
    reactor.run()


main()