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