view service/starArduino/barcodePlayer.py @ 1305:965397a2648a

rm old complicated usb bus checker and resetter that caught some error modes and reset the right parts of the usb tree Ignore-this: 1003481c29f8bb01b3758bf6f6241d65 darcs-hash:78af0ceedceca9a96255b825a26003a75f6b5991
author drewp <drewp@bigasterisk.com>
date Sun, 21 Apr 2019 03:04:42 -0700
parents 48a5ce00a881
children
line wrap: on
line source

#!bin/python
"""
receives POSTs about barcodes that are scanned, plays songs on mpd
"""

from __future__ import division

import cyclone.web, cyclone.httpclient, sys, json, urllib
from twisted.python import log as twlog
from twisted.internet import reactor
from twisted.internet.defer import inlineCallbacks
sys.path.append("/my/proj/homeauto/lib")
from cycloneerr import PrettyErrorHandler
from logsetup import log

from pymongo import Connection
mpdPaths = Connection("bang", 27017)['barcodePlayer']['mpdPaths']

class Index(PrettyErrorHandler, cyclone.web.RequestHandler):
    def get(self):
        self.write("barcode player. POST to /barcodeScan")

class BarcodeScan(PrettyErrorHandler, cyclone.web.RequestHandler):
    @inlineCallbacks
    def post(self):
        code = json.loads(self.request.body)

        if not code['code'].startswith("music "):
            raise ValueError("this service only knows music barcodes, not %r" %
                             code)

        rows = list(mpdPaths.find({'_id' : int(code['code'].split()[1])}))
        if not rows:
            raise ValueError("code %r unknown" % code)

        song = rows[0]['mpdPath']

        post = "http://star:9009/addAndPlay/%s" % urllib.quote(song, safe='')
        result = (yield cyclone.httpclient.fetch(
            method="POST", url=post)).body
        log.info("post result: %r", result)
        self.write(result)


if __name__ == '__main__':
    app = cyclone.web.Application([
        (r'/', Index),
        (r'/barcodeScan', BarcodeScan),
        ], )
    twlog.startLogging(sys.stdout)
    reactor.listenTCP(9011, app)
    reactor.run()