diff --git a/mopidy/handler.py b/mopidy/handler.py index aad615e4..45a5e54d 100644 --- a/mopidy/handler.py +++ b/mopidy/handler.py @@ -21,9 +21,9 @@ def register(pattern): return decorator class MpdHandler(object): - def __init__(self, session=None, backend=SpotifyBackend): + def __init__(self, session=None, backend=None): self.session = session - self.register_backend(backend()) + self.backend = backend def handle_request(self, request): for pattern in _request_handlers: @@ -34,9 +34,6 @@ class MpdHandler(object): logger.warning(u'Unhandled request: %s', request) return False - def register_backend(self, backend): - self.backend = backend - @register(r'^add "(?P[^"]*)"$') def _add(self, uri): pass # TODO diff --git a/mopidy/server.py b/mopidy/server.py index fbe38599..2d07d51e 100644 --- a/mopidy/server.py +++ b/mopidy/server.py @@ -5,13 +5,15 @@ import sys from mopidy import settings from mopidy.session import MpdSession +from mopidy.backends.spotify import SpotifyBackend logger = logging.getLogger(u'server') class MpdServer(asyncore.dispatcher): - def __init__(self, handler_class=MpdSession): + def __init__(self, session_class=MpdSession, backend=SpotifyBackend): asyncore.dispatcher.__init__(self) - self.handler_class = handler_class + self.session_class = session_class + self.backend = SpotifyBackend() self.create_socket(socket.AF_INET, socket.SOCK_STREAM) self.set_reuse_addr() self.bind((settings.MPD_SERVER_HOSTNAME, settings.MPD_SERVER_PORT)) @@ -20,7 +22,8 @@ class MpdServer(asyncore.dispatcher): def handle_accept(self): (client_socket, client_address) = self.accept() logger.info(u'Connection from: [%s]:%s', *client_address) - self.handler_class(self, client_socket, client_address) + self.session_class(self, client_socket, client_address, + backend=self.backend) def handle_close(self): self.close() diff --git a/mopidy/session.py b/mopidy/session.py index 9002aaa7..6e76c5cd 100644 --- a/mopidy/session.py +++ b/mopidy/session.py @@ -7,14 +7,14 @@ from mopidy.handler import MpdHandler logger = logging.getLogger(u'session') class MpdSession(asynchat.async_chat): - def __init__(self, server, client_socket, client_address, - handler=MpdHandler): + def __init__(self, server, client_socket, client_address, backend, + handler_class=MpdHandler): asynchat.async_chat.__init__(self, sock=client_socket) self.server = server self.client_address = client_address self.input_buffer = [] self.set_terminator(settings.MPD_LINE_TERMINATOR) - self.handler = handler(session=self) + self.handler = handler_class(session=self, backend=backend) self.send_response(u'OK MPD %s' % get_mpd_version()) def do_close(self): @@ -51,4 +51,3 @@ class MpdSession(asynchat.async_chat): output = u'%s%s' % (output, settings.MPD_LINE_TERMINATOR) data = output.encode(settings.MPD_LINE_ENCODING) self.push(data) - diff --git a/tests/handlertest.py b/tests/handlertest.py index 863a7b00..5e3432a6 100644 --- a/tests/handlertest.py +++ b/tests/handlertest.py @@ -5,7 +5,7 @@ from mopidy.backends.dummy import DummyBackend class RequestHandlerTest(unittest.TestCase): def setUp(self): - self.h = handler.MpdHandler(backend=DummyBackend) + self.h = handler.MpdHandler(backend=DummyBackend()) def test_register_same_pattern_twice_fails(self): func = lambda: None @@ -26,15 +26,10 @@ class RequestHandlerTest(unittest.TestCase): result = self.h.handle_request('known request') self.assertEquals(expected, result) - def test_register_backend(self): - expected = 'magic' - self.h.register_backend(expected) - self.assertEquals(expected, self.h.backend) - class StatusHandlerTest(unittest.TestCase): def setUp(self): - self.h = handler.MpdHandler(backend=DummyBackend) + self.h = handler.MpdHandler(backend=DummyBackend()) def test_clearerror(self): result = self.h.handle_request(u'clearerror') @@ -93,7 +88,7 @@ class StatusHandlerTest(unittest.TestCase): class PlaybackOptionsHandlerTest(unittest.TestCase): def setUp(self): - self.h = handler.MpdHandler(backend=DummyBackend) + self.h = handler.MpdHandler(backend=DummyBackend()) def test_consume_off(self): result = self.h.handle_request(u'consume "0"') @@ -189,7 +184,7 @@ class PlaybackOptionsHandlerTest(unittest.TestCase): class PlaybackControlHandlerTest(unittest.TestCase): def setUp(self): - self.h = handler.MpdHandler(backend=DummyBackend) + self.h = handler.MpdHandler(backend=DummyBackend()) def test_next(self): result = self.h.handle_request(u'next') @@ -230,7 +225,7 @@ class PlaybackControlHandlerTest(unittest.TestCase): class CurrentPlaylistHandlerTest(unittest.TestCase): def setUp(self): - self.h = handler.MpdHandler(backend=DummyBackend) + self.h = handler.MpdHandler(backend=DummyBackend()) def test_add(self): result = self.h.handle_request(u'add "file:///dev/urandom"') @@ -348,7 +343,7 @@ class CurrentPlaylistHandlerTest(unittest.TestCase): class StoredPlaylistsHandlerTest(unittest.TestCase): def setUp(self): - self.h = handler.MpdHandler(backend=DummyBackend) + self.h = handler.MpdHandler(backend=DummyBackend()) def test_listplaylist(self): result = self.h.handle_request(u'listplaylist name') @@ -398,7 +393,7 @@ class StoredPlaylistsHandlerTest(unittest.TestCase): class MusicDatabaseHandlerTest(unittest.TestCase): def setUp(self): - self.h = handler.MpdHandler(backend=DummyBackend) + self.h = handler.MpdHandler(backend=DummyBackend()) def test_count(self): result = self.h.handle_request(u'count tag needle') @@ -508,7 +503,7 @@ class MusicDatabaseHandlerTest(unittest.TestCase): class StickersHandlerTest(unittest.TestCase): def setUp(self): - self.h = handler.MpdHandler(backend=DummyBackend) + self.h = handler.MpdHandler(backend=DummyBackend()) pass # TODO @@ -524,7 +519,7 @@ class DummySession(object): class ConnectionHandlerTest(unittest.TestCase): def setUp(self): self.h = handler.MpdHandler(session=DummySession(), - backend=DummyBackend) + backend=DummyBackend()) def test_close(self): result = self.h.handle_request(u'close') @@ -548,14 +543,14 @@ class ConnectionHandlerTest(unittest.TestCase): class AudioOutputHandlerTest(unittest.TestCase): def setUp(self): - self.h = handler.MpdHandler(backend=DummyBackend) + self.h = handler.MpdHandler(backend=DummyBackend()) pass # TODO class ReflectionHandlerTest(unittest.TestCase): def setUp(self): - self.h = handler.MpdHandler(backend=DummyBackend) + self.h = handler.MpdHandler(backend=DummyBackend()) def test_urlhandlers(self): result = self.h.handle_request(u'urlhandlers')