Mercurial > code > home > repos > homeauto
annotate service/starArduino/barcodePlayer.py @ 1136:1e43ec4a5f23
build and import updates for rdfdb, etc
Ignore-this: 233cb2b31f03be51695f0fff40eecca7
darcs-hash:92c1c526292f9013ad41d2e3b6d11add8fff02ae
author | drewp <drewp@bigasterisk.com> |
---|---|
date | Mon, 19 Feb 2018 04:21:28 -0800 |
parents | 48a5ce00a881 |
children |
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 |
1005
48a5ce00a881
old updates to barcode player
drewp <drewp@bigasterisk.com>
parents:
831
diff
changeset
|
9 from twisted.python import log as twlog |
828
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 |
1005
48a5ce00a881
old updates to barcode player
drewp <drewp@bigasterisk.com>
parents:
831
diff
changeset
|
14 from logsetup import log |
48a5ce00a881
old updates to barcode player
drewp <drewp@bigasterisk.com>
parents:
831
diff
changeset
|
15 |
831
bbecee3d287d
barcode player send commands to pympd
drewp <drewp@bigasterisk.com>
parents:
828
diff
changeset
|
16 from pymongo import Connection |
bbecee3d287d
barcode player send commands to pympd
drewp <drewp@bigasterisk.com>
parents:
828
diff
changeset
|
17 mpdPaths = Connection("bang", 27017)['barcodePlayer']['mpdPaths'] |
828
a422d875d94d
barcode support on star. triggers mpd song
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
18 |
a422d875d94d
barcode support on star. triggers mpd song
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
19 class Index(PrettyErrorHandler, cyclone.web.RequestHandler): |
a422d875d94d
barcode support on star. triggers mpd song
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
20 def get(self): |
831
bbecee3d287d
barcode player send commands to pympd
drewp <drewp@bigasterisk.com>
parents:
828
diff
changeset
|
21 self.write("barcode player. POST to /barcodeScan") |
828
a422d875d94d
barcode support on star. triggers mpd song
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
22 |
a422d875d94d
barcode support on star. triggers mpd song
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
23 class BarcodeScan(PrettyErrorHandler, cyclone.web.RequestHandler): |
a422d875d94d
barcode support on star. triggers mpd song
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
24 @inlineCallbacks |
a422d875d94d
barcode support on star. triggers mpd song
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
25 def post(self): |
831
bbecee3d287d
barcode player send commands to pympd
drewp <drewp@bigasterisk.com>
parents:
828
diff
changeset
|
26 code = json.loads(self.request.body) |
828
a422d875d94d
barcode support on star. triggers mpd song
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
27 |
831
bbecee3d287d
barcode player send commands to pympd
drewp <drewp@bigasterisk.com>
parents:
828
diff
changeset
|
28 if not code['code'].startswith("music "): |
bbecee3d287d
barcode player send commands to pympd
drewp <drewp@bigasterisk.com>
parents:
828
diff
changeset
|
29 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
|
30 code) |
828
a422d875d94d
barcode support on star. triggers mpd song
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
31 |
831
bbecee3d287d
barcode player send commands to pympd
drewp <drewp@bigasterisk.com>
parents:
828
diff
changeset
|
32 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
|
33 if not rows: |
bbecee3d287d
barcode player send commands to pympd
drewp <drewp@bigasterisk.com>
parents:
828
diff
changeset
|
34 raise ValueError("code %r unknown" % code) |
bbecee3d287d
barcode player send commands to pympd
drewp <drewp@bigasterisk.com>
parents:
828
diff
changeset
|
35 |
bbecee3d287d
barcode player send commands to pympd
drewp <drewp@bigasterisk.com>
parents:
828
diff
changeset
|
36 song = rows[0]['mpdPath'] |
828
a422d875d94d
barcode support on star. triggers mpd song
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
37 |
831
bbecee3d287d
barcode player send commands to pympd
drewp <drewp@bigasterisk.com>
parents:
828
diff
changeset
|
38 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
|
39 result = (yield cyclone.httpclient.fetch( |
bbecee3d287d
barcode player send commands to pympd
drewp <drewp@bigasterisk.com>
parents:
828
diff
changeset
|
40 method="POST", url=post)).body |
1005
48a5ce00a881
old updates to barcode player
drewp <drewp@bigasterisk.com>
parents:
831
diff
changeset
|
41 log.info("post result: %r", result) |
831
bbecee3d287d
barcode player send commands to pympd
drewp <drewp@bigasterisk.com>
parents:
828
diff
changeset
|
42 self.write(result) |
828
a422d875d94d
barcode support on star. triggers mpd song
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
43 |
a422d875d94d
barcode support on star. triggers mpd song
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
44 |
a422d875d94d
barcode support on star. triggers mpd song
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
45 if __name__ == '__main__': |
a422d875d94d
barcode support on star. triggers mpd song
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
46 app = cyclone.web.Application([ |
a422d875d94d
barcode support on star. triggers mpd song
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
47 (r'/', Index), |
a422d875d94d
barcode support on star. triggers mpd song
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
48 (r'/barcodeScan', BarcodeScan), |
a422d875d94d
barcode support on star. triggers mpd song
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
49 ], ) |
1005
48a5ce00a881
old updates to barcode player
drewp <drewp@bigasterisk.com>
parents:
831
diff
changeset
|
50 twlog.startLogging(sys.stdout) |
828
a422d875d94d
barcode support on star. triggers mpd song
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
51 reactor.listenTCP(9011, app) |
a422d875d94d
barcode support on star. triggers mpd song
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
52 reactor.run() |