Move instantiation of backend from handler to server as the same backend should be used for multiple (simultaneous) sessions
This commit is contained in:
parent
3f41fc8df7
commit
256e5e685a
@ -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
|
||||
|
||||
@ -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()
|
||||
|
||||
@ -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)
|
||||
|
||||
|
||||
@ -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')
|
||||
|
||||
Loading…
Reference in New Issue
Block a user