From 6d04aaf3e4047511077dcdc71a48b4d162baeeab Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Tue, 20 May 2014 22:49:53 +0200 Subject: [PATCH] http: More consistent use of 'request handler' --- mopidy/http/actor.py | 73 +++++++++++++++++++-------------------- tests/http/test_router.py | 2 +- 2 files changed, 37 insertions(+), 38 deletions(-) diff --git a/mopidy/http/actor.py b/mopidy/http/actor.py index 99713131..01feced2 100644 --- a/mopidy/http/actor.py +++ b/mopidy/http/actor.py @@ -34,42 +34,6 @@ class HttpFrontend(pykka.ThreadingActor, CoreListener): self.app = None self.websocket_clients = set() - def _load_extensions(self): - request_handlers = [] - for router_class in self.routers: - router = router_class(self.config) - request_handlers.extend(router.get_request_handlers()) - logger.info( - 'Loaded HTTP extension: %s', router_class.__name__) - return request_handlers - - def _create_routes(self): - mopidy_dir = os.path.join(os.path.dirname(__file__), 'data') - static_dir = self.config['http']['static_dir'] - - # either default mopidy or user defined path to files - primary_dir = (r'/(.*)', handlers.StaticFileHandler, { - 'path': static_dir if static_dir else mopidy_dir, - 'default_filename': 'index.html' - }) - - routes = self._load_extensions() - logger.debug( - 'HTTP routes from extensions: %s', - list((l[0], l[1]) for l in routes) - ) - - # TODO: Dynamically define all endpoints - routes.extend([ - (r'/mopidy/ws/?', handlers.WebSocketHandler, {'actor': self}), - (r'/mopidy/rpc', handlers.JsonRpcHandler, {'actor': self}), - (r'/mopidy/(.*)', handlers.StaticFileHandler, { - 'path': mopidy_dir, 'default_filename': 'mopidy.html' - }), - primary_dir, - ]) - return routes - def on_start(self): threading.Thread(target=self._startup).start() self._publish_zeroconf() @@ -80,7 +44,7 @@ class HttpFrontend(pykka.ThreadingActor, CoreListener): def _startup(self): logger.debug('Starting HTTP server') - self.app = tornado.web.Application(self._create_routes()) + self.app = tornado.web.Application(self._get_request_handlers()) self.app.listen(self.port, self.hostname) logger.info( 'HTTP server running at http://%s:%s', self.hostname, self.port) @@ -97,6 +61,41 @@ class HttpFrontend(pykka.ThreadingActor, CoreListener): message = json.dumps(event, cls=models.ModelJSONEncoder) handlers.WebSocketHandler.broadcast(self.websocket_clients, message) + def _get_request_handlers(self): + mopidy_dir = os.path.join(os.path.dirname(__file__), 'data') + + # Either default Mopidy or user defined path to files + static_dir = self.config['http']['static_dir'] + root_dir = (r'/(.*)', handlers.StaticFileHandler, { + 'path': static_dir if static_dir else mopidy_dir, + 'default_filename': 'index.html' + }) + + request_handlers = self._get_extension_request_handlers() + logger.debug( + 'HTTP routes from extensions: %s', + list((l[0], l[1]) for l in request_handlers)) + + # TODO: Dynamically define all endpoints + request_handlers.extend([ + (r'/mopidy/ws/?', handlers.WebSocketHandler, {'actor': self}), + (r'/mopidy/rpc', handlers.JsonRpcHandler, {'actor': self}), + (r'/mopidy/(.*)', handlers.StaticFileHandler, { + 'path': mopidy_dir, 'default_filename': 'mopidy.html' + }), + root_dir, + ]) + return request_handlers + + def _get_extension_request_handlers(self): + request_handlers = [] + for router_class in self.routers: + router = router_class(self.config) + request_handlers.extend(router.get_request_handlers()) + logger.info( + 'Loaded HTTP extension: %s', router_class.__name__) + return request_handlers + def _publish_zeroconf(self): if not self.zeroconf_name: return diff --git a/tests/http/test_router.py b/tests/http/test_router.py index 40bcb178..2d34a329 100644 --- a/tests/http/test_router.py +++ b/tests/http/test_router.py @@ -110,7 +110,7 @@ class DefaultHTTPServerTest(AsyncHTTPTestCase): core.get_version.return_value = mopidy.__version__ actor_http = actor.HttpFrontend(config=config, core=core) - return Application(actor_http._create_routes()) + return Application(actor_http._get_request_handlers()) def test_root_should_return_index(self): response = self.fetch('/', method='GET')