diff --git a/mopidy/http/__init__.py b/mopidy/http/__init__.py index 565a7d6a..072abcff 100644 --- a/mopidy/http/__init__.py +++ b/mopidy/http/__init__.py @@ -62,58 +62,28 @@ class Router(object): Must be overridden by all subclasses. - This should be the same as the ``ext_name`` of the Mopidy extension - implementing an HTTP router. The :attr:`~Router.name` will be used to - namespace all URLs handled by this router. + This should be the same as the :attr:`~mopidy.ext.Extension.ext_name` of + the Mopidy extension implementing an HTTP router. The :attr:`~Router.name` + will be used to namespace all URLs handled by this router. For example, if :attr:`~Router.name` is ``soundspot``, then the router will manage all requests starting with ``http://localhost:6680/soundspot``. """ - static_file_path = None - """Path to location of static files to be served. - - If you only need to serve static files, set this attribute and use the - default implementation of :meth:`~Router.get_request_handlers`. - - If you override :meth:`~Router.get_request_handlers` this attribute is not - used. - """ - def __init__(self, config, core): self.config = config self.core = core - self.hostname = config['http']['hostname'] - self.port = config['http']['port'] if not self.name: - raise ValueError('Undefined router name in %s' % self) - - def get_root_url(self): - """Get the absolute URL to the root of this router.""" - return 'http://%s:%s/%s/' % (self.hostname, self.port, self.name) + raise ValueError('Router name must be set') def get_request_handlers(self): """ Get request handlers for the URL namespace owned by this router. - The default implementation of this method serves static files from - :attr:`static_file_path`. To extend the HTTP server with more - server side functionality, this method must be overridden. + Must be overridden by all subclasses. - Must return a list of request handlers compatible with + Returns a list of request handlers compatible with :class:`tornado.web.Application`. The URL patterns should not include the :attr:`name` prefix, as that will be prepended by the web server. """ - if self.static_file_path is None: - raise ValueError('Undefined static file path in %s' % self) - - from mopidy.http.handlers import StaticFileHandler - - logger.info( - 'Serving HTTP extension %s at %s', type(self), self.get_root_url()) - return [ - (r'/(.*)', StaticFileHandler, { - 'path': self.static_file_path, - 'default_filename': 'index.html' - }), - ] + raise NotImplementedError diff --git a/tests/http/test_router.py b/tests/http/test_router.py index 759dde9b..2ca4734e 100644 --- a/tests/http/test_router.py +++ b/tests/http/test_router.py @@ -6,7 +6,6 @@ import unittest import mock from mopidy import http -from mopidy.http import handlers class TestRouter(http.Router): @@ -14,12 +13,8 @@ class TestRouter(http.Router): static_file_path = os.path.join(os.path.dirname(__file__), 'static') -class TestRouterMissingPath(http.Router): - name = 'test' - - class TestRouterMissingName(http.Router): - static_file_path = os.path.join(os.path.dirname(__file__), 'static') + pass class HttpRouterTest(unittest.TestCase): @@ -40,27 +35,12 @@ class HttpRouterTest(unittest.TestCase): self.assertIs(router.config, self.config) self.assertIs(router.core, self.core) - def test_default_request_handlers(self): - router = TestRouter(self.config, self.core) - - (pattern, handler_class, kwargs) = router.get_request_handlers()[0] - - self.assertEqual(pattern, r'/(.*)') - self.assertIs(handler_class, handlers.StaticFileHandler) - self.assertEqual( - kwargs['path'], os.path.join(os.path.dirname(__file__), 'static')) - - def test_default_router_missing_name(self): + def test_undefined_name_raises_error(self): with self.assertRaises(ValueError): TestRouterMissingName(self.config, self.core) - def test_default_router_missing_path(self): - router = TestRouterMissingPath(self.config, self.core) - - with self.assertRaises(ValueError): - router.get_request_handlers() - - def test_get_root_url(self): + def test_undefined_request_handlers_raises_error(self): router = TestRouter(self.config, self.core) - self.assertEqual('http://127.0.0.1:6680/test/', router.get_root_url()) + with self.assertRaises(NotImplementedError): + router.get_request_handlers()