Mercurial > code > home > repos > light9
annotate bin/paintserver @ 1522:69088fe2865e
more progress on paint
Ignore-this: ff24e7a8e8f95bde364841c6076e839
author | Drew Perttula <drewp@bigasterisk.com> |
---|---|
date | Sat, 15 Apr 2017 19:16:32 +0000 |
parents | 15f296550447 |
children | a30a73c12554 |
rev | line source |
---|---|
1521 | 1 #!bin/python |
2 | |
3 from __future__ import division | |
4 from run_local import log | |
5 import json | |
6 from twisted.internet import reactor | |
7 from light9.greplin_cyclone import StatsForCyclone | |
8 from light9.rdfdb.syncedgraph import SyncedGraph | |
9 from light9 import networking, showconfig | |
10 from greplin import scales | |
11 import optparse, sys, logging | |
12 import cyclone.web | |
13 from rdflib import URIRef | |
14 from light9.rdfdb import clientsession | |
15 import light9.paint.solve | |
16 from lib.cycloneerr import PrettyErrorHandler | |
17 | |
1522
69088fe2865e
more progress on paint
Drew Perttula <drewp@bigasterisk.com>
parents:
1521
diff
changeset
|
18 |
1521 | 19 class Solve(PrettyErrorHandler, cyclone.web.RequestHandler): |
20 def post(self): | |
21 painting = json.loads(self.request.body) | |
22 reload(light9.paint.solve) | |
1522
69088fe2865e
more progress on paint
Drew Perttula <drewp@bigasterisk.com>
parents:
1521
diff
changeset
|
23 solver = light9.paint.solve.Solver(self.settings.graph) |
69088fe2865e
more progress on paint
Drew Perttula <drewp@bigasterisk.com>
parents:
1521
diff
changeset
|
24 solver.loadSamples() |
1521 | 25 with self.settings.stats.solve.time(): |
1522
69088fe2865e
more progress on paint
Drew Perttula <drewp@bigasterisk.com>
parents:
1521
diff
changeset
|
26 out = solver.solve(painting) |
1521 | 27 self.write(json.dumps(out)) |
28 | |
29 class App(object): | |
30 def __init__(self, show, session): | |
31 self.show = show | |
32 self.session = session | |
33 | |
34 self.graph = SyncedGraph(networking.rdfdb.url, "paintServer") | |
35 self.graph.initiallySynced.addCallback(self.launch) | |
36 | |
37 self.stats = scales.collection('/', | |
38 scales.PmfStat('solve'), | |
39 ) | |
40 def launch(self, *args): | |
41 self.cycloneApp = cyclone.web.Application(handlers=[ | |
42 (r'/stats', StatsForCyclone), | |
43 (r'/solve', Solve), | |
44 ], | |
45 debug=True, | |
46 graph=self.graph, | |
47 stats=self.stats) | |
48 reactor.listenTCP(networking.paintServer.port, self.cycloneApp) | |
49 log.info("listening on %s" % networking.paintServer.port) | |
50 | |
51 | |
52 if __name__ == "__main__": | |
53 parser = optparse.OptionParser() | |
54 parser.add_option('--show', | |
55 help='show URI, like http://light9.bigasterisk.com/show/dance2008', | |
56 default=showconfig.showUri()) | |
57 parser.add_option("-v", "--verbose", action="store_true", | |
58 help="logging.DEBUG") | |
59 parser.add_option("--twistedlog", action="store_true", | |
60 help="twisted logging") | |
61 clientsession.add_option(parser) | |
62 (options, args) = parser.parse_args() | |
63 log.setLevel(logging.DEBUG if options.verbose else logging.INFO) | |
64 | |
65 if not options.show: | |
66 raise ValueError("missing --show http://...") | |
67 | |
68 session = clientsession.getUri('paint', options) | |
69 | |
70 app = App(URIRef(options.show), session) | |
71 if options.twistedlog: | |
72 from twisted.python import log as twlog | |
73 twlog.startLogging(sys.stderr) | |
74 reactor.run() |