annotate service/starArduino/barcodePlayer.py @ 28:97d7c0bb9408

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