Move instantiation of backend from handler to server as the same backend should be used for multiple (simultaneous) sessions

This commit is contained in:
Stein Magnus Jodal 2009-12-25 15:54:44 +01:00
parent 3f41fc8df7
commit 256e5e685a
4 changed files with 22 additions and 28 deletions

View File

@ -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<uri>[^"]*)"$')
def _add(self, uri):
pass # TODO

View File

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

View File

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

View File

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