http: More consistent use of 'request handler'

This commit is contained in:
Stein Magnus Jodal 2014-05-20 22:49:53 +02:00
parent b44c9a6f9c
commit 6d04aaf3e4
2 changed files with 37 additions and 38 deletions

View File

@ -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

View File

@ -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')