diff --git a/bin/curvecalc b/bin/curvecalc --- a/bin/curvecalc +++ b/bin/curvecalc @@ -471,16 +471,17 @@ def launch(args, graph, session, opts, s log.debug("quitting now because of --startup-only") return - def hoverTimeResponse(request): + def hoverTimeResponse(requestHandler): results = dispatcher.send("onPlayPause") times = [t for listener, t in results if t is not None] if not times: - request.setResponseCode(404) - return "not hovering over any time" + requestHandler.set_status(404) + requestHandler.write("not hovering over any time") + return with graph.currentState( tripleFilter=(session, L9['currentSong'], None)) as g: song = g.value(session, L9['currentSong']) - return json.dumps({"song": song, "hoverTime" : times[0]}) + json.dump({"song": song, "hoverTime" : times[0]}, requestHandler) serveCurveEdit(networking.curveCalc.port, hoverTimeResponse) diff --git a/light9/curvecalc/curveedit.py b/light9/curvecalc/curveedit.py --- a/light9/curvecalc/curveedit.py +++ b/light9/curvecalc/curveedit.py @@ -2,19 +2,20 @@ this may be split out from curvecalc someday, since it doesn't need to be tied to a gui """ from twisted.internet import reactor -from light9 import networking +import cyclone.web, cyclone.httpclient, cyclone.websocket + +from lib.cycloneerr import PrettyErrorHandler + def serveCurveEdit(port, hoverTimeResponse): """ /hoverTime requests actually are handled by the curvecalc gui """ - - from twisted.web import server, resource - class Hover(resource.Resource): - isLeaf = True - def render_GET(self, request): - if request.path == '/hoverTime': - return hoverTimeResponse(request) - raise NotImplementedError() - reactor.listenTCP(port, server.Site(Hover())) + class HoverTime(PrettyErrorHandler, cyclone.web.RequestHandler): + def get(self): + hoverTimeResponse(self) + + reactor.listenTCP(port, cyclone.web.Application(handlers=[ + (r'/hoverTime', HoverTime), + ], debug=True))