annotate service/starArduino/barcodePlayer.py @ 841:ddc2cdbfde50

rdflib and jsonlib api updates Ignore-this: feb4c3bee7704dee42f1d3a01b20f4e8 darcs-hash:20120808062410-312f9-2d5e41e2bb782e0e3946af63c6bbaf695f23fc16
author drewp <drewp@bigasterisk.com>
date Tue, 07 Aug 2012 23:24:10 -0700
parents bbecee3d287d
children ca380454d176
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
828
a422d875d94d barcode support on star. triggers mpd song
drewp <drewp@bigasterisk.com>
parents:
diff changeset
1 #!bin/python
a422d875d94d barcode support on star. triggers mpd song
drewp <drewp@bigasterisk.com>
parents:
diff changeset
2 """
a422d875d94d barcode support on star. triggers mpd song
drewp <drewp@bigasterisk.com>
parents:
diff changeset
3 receives POSTs about barcodes that are scanned, plays songs on mpd
a422d875d94d barcode support on star. triggers mpd song
drewp <drewp@bigasterisk.com>
parents:
diff changeset
4 """
a422d875d94d barcode support on star. triggers mpd song
drewp <drewp@bigasterisk.com>
parents:
diff changeset
5
a422d875d94d barcode support on star. triggers mpd song
drewp <drewp@bigasterisk.com>
parents:
diff changeset
6 from __future__ import division
a422d875d94d barcode support on star. triggers mpd song
drewp <drewp@bigasterisk.com>
parents:
diff changeset
7
831
bbecee3d287d barcode player send commands to pympd
drewp <drewp@bigasterisk.com>
parents: 828
diff changeset
8 import cyclone.web, cyclone.httpclient, sys, json, urllib
828
a422d875d94d barcode support on star. triggers mpd song
drewp <drewp@bigasterisk.com>
parents:
diff changeset
9 from twisted.python import log
a422d875d94d barcode support on star. triggers mpd song
drewp <drewp@bigasterisk.com>
parents:
diff changeset
10 from twisted.internet import reactor
a422d875d94d barcode support on star. triggers mpd song
drewp <drewp@bigasterisk.com>
parents:
diff changeset
11 from twisted.internet.defer import inlineCallbacks
a422d875d94d barcode support on star. triggers mpd song
drewp <drewp@bigasterisk.com>
parents:
diff changeset
12 sys.path.append("/my/proj/homeauto/lib")
a422d875d94d barcode support on star. triggers mpd song
drewp <drewp@bigasterisk.com>
parents:
diff changeset
13 from cycloneerr import PrettyErrorHandler
831
bbecee3d287d barcode player send commands to pympd
drewp <drewp@bigasterisk.com>
parents: 828
diff changeset
14 from pymongo import Connection
bbecee3d287d barcode player send commands to pympd
drewp <drewp@bigasterisk.com>
parents: 828
diff changeset
15 mpdPaths = Connection("bang", 27017)['barcodePlayer']['mpdPaths']
828
a422d875d94d barcode support on star. triggers mpd song
drewp <drewp@bigasterisk.com>
parents:
diff changeset
16
a422d875d94d barcode support on star. triggers mpd song
drewp <drewp@bigasterisk.com>
parents:
diff changeset
17 class Index(PrettyErrorHandler, cyclone.web.RequestHandler):
a422d875d94d barcode support on star. triggers mpd song
drewp <drewp@bigasterisk.com>
parents:
diff changeset
18 def get(self):
831
bbecee3d287d barcode player send commands to pympd
drewp <drewp@bigasterisk.com>
parents: 828
diff changeset
19 self.write("barcode player. POST to /barcodeScan")
828
a422d875d94d barcode support on star. triggers mpd song
drewp <drewp@bigasterisk.com>
parents:
diff changeset
20
a422d875d94d barcode support on star. triggers mpd song
drewp <drewp@bigasterisk.com>
parents:
diff changeset
21 class BarcodeScan(PrettyErrorHandler, cyclone.web.RequestHandler):
a422d875d94d barcode support on star. triggers mpd song
drewp <drewp@bigasterisk.com>
parents:
diff changeset
22 @inlineCallbacks
a422d875d94d barcode support on star. triggers mpd song
drewp <drewp@bigasterisk.com>
parents:
diff changeset
23 def post(self):
831
bbecee3d287d barcode player send commands to pympd
drewp <drewp@bigasterisk.com>
parents: 828
diff changeset
24 code = json.loads(self.request.body)
828
a422d875d94d barcode support on star. triggers mpd song
drewp <drewp@bigasterisk.com>
parents:
diff changeset
25
831
bbecee3d287d barcode player send commands to pympd
drewp <drewp@bigasterisk.com>
parents: 828
diff changeset
26 if not code['code'].startswith("music "):
bbecee3d287d barcode player send commands to pympd
drewp <drewp@bigasterisk.com>
parents: 828
diff changeset
27 raise ValueError("this service only knows music barcodes, not %r" %
bbecee3d287d barcode player send commands to pympd
drewp <drewp@bigasterisk.com>
parents: 828
diff changeset
28 code)
828
a422d875d94d barcode support on star. triggers mpd song
drewp <drewp@bigasterisk.com>
parents:
diff changeset
29
831
bbecee3d287d barcode player send commands to pympd
drewp <drewp@bigasterisk.com>
parents: 828
diff changeset
30 rows = list(mpdPaths.find({'_id' : int(code['code'].split()[1])}))
bbecee3d287d barcode player send commands to pympd
drewp <drewp@bigasterisk.com>
parents: 828
diff changeset
31 if not rows:
bbecee3d287d barcode player send commands to pympd
drewp <drewp@bigasterisk.com>
parents: 828
diff changeset
32 raise ValueError("code %r unknown" % code)
bbecee3d287d barcode player send commands to pympd
drewp <drewp@bigasterisk.com>
parents: 828
diff changeset
33
bbecee3d287d barcode player send commands to pympd
drewp <drewp@bigasterisk.com>
parents: 828
diff changeset
34 song = rows[0]['mpdPath']
828
a422d875d94d barcode support on star. triggers mpd song
drewp <drewp@bigasterisk.com>
parents:
diff changeset
35
831
bbecee3d287d barcode player send commands to pympd
drewp <drewp@bigasterisk.com>
parents: 828
diff changeset
36 post = "http://star:9009/addAndPlay/%s" % urllib.quote(song, safe='')
bbecee3d287d barcode player send commands to pympd
drewp <drewp@bigasterisk.com>
parents: 828
diff changeset
37 result = (yield cyclone.httpclient.fetch(
bbecee3d287d barcode player send commands to pympd
drewp <drewp@bigasterisk.com>
parents: 828
diff changeset
38 method="POST", url=post)).body
bbecee3d287d barcode player send commands to pympd
drewp <drewp@bigasterisk.com>
parents: 828
diff changeset
39 print result
bbecee3d287d barcode player send commands to pympd
drewp <drewp@bigasterisk.com>
parents: 828
diff changeset
40 self.write(result)
828
a422d875d94d barcode support on star. triggers mpd song
drewp <drewp@bigasterisk.com>
parents:
diff changeset
41
a422d875d94d barcode support on star. triggers mpd song
drewp <drewp@bigasterisk.com>
parents:
diff changeset
42
a422d875d94d barcode support on star. triggers mpd song
drewp <drewp@bigasterisk.com>
parents:
diff changeset
43 if __name__ == '__main__':
a422d875d94d barcode support on star. triggers mpd song
drewp <drewp@bigasterisk.com>
parents:
diff changeset
44 app = cyclone.web.Application([
a422d875d94d barcode support on star. triggers mpd song
drewp <drewp@bigasterisk.com>
parents:
diff changeset
45 (r'/', Index),
a422d875d94d barcode support on star. triggers mpd song
drewp <drewp@bigasterisk.com>
parents:
diff changeset
46 (r'/barcodeScan', BarcodeScan),
a422d875d94d barcode support on star. triggers mpd song
drewp <drewp@bigasterisk.com>
parents:
diff changeset
47 ], )
a422d875d94d barcode support on star. triggers mpd song
drewp <drewp@bigasterisk.com>
parents:
diff changeset
48 log.startLogging(sys.stdout)
a422d875d94d barcode support on star. triggers mpd song
drewp <drewp@bigasterisk.com>
parents:
diff changeset
49 reactor.listenTCP(9011, app)
a422d875d94d barcode support on star. triggers mpd song
drewp <drewp@bigasterisk.com>
parents:
diff changeset
50 reactor.run()