From 46bc8798f809f7d525107d6612402dfe6f1b5000 Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Sat, 26 Dec 2009 03:20:45 +0100 Subject: [PATCH] Move most of handle_response from session to handler --- mopidy/handler.py | 30 ++++++++++++++++++++++-------- mopidy/session.py | 13 ++----------- tests/handlertest.py | 28 ++++++++++++---------------- 3 files changed, 36 insertions(+), 35 deletions(-) diff --git a/mopidy/handler.py b/mopidy/handler.py index a9808f7c..a96d7b89 100644 --- a/mopidy/handler.py +++ b/mopidy/handler.py @@ -45,14 +45,28 @@ class MpdHandler(object): result = _request_handlers[pattern](self, **groups) if self.command_list is not False: return None - response = [] - if result is not None: - response.append(result) - if add_ok: - response.append(u'OK') - return flatten(response) - logger.warning(u'Unhandled request: %s', request) - raise MpdAckError(u'Unhandled request: %s' % request) + else: + return self.handle_response(result, add_ok) + raise MpdAckError(u'Unknown command: %s' % request) + + def handle_response(self, result, add_ok=True): + response = [] + if result is None: + result = [] + elif not isinstance(result, list): + result = [result] + for line in flatten(result): + if isinstance(line, dict): + for (key, value) in line.items(): + response.append(u'%s: %s' % (key, value)) + elif isinstance(line, tuple): + (key, value) = line + response.append(u'%s: %s' % (key, value)) + else: + response.append(line) + if add_ok: + response.append(u'OK') + return response @register(r'^add "(?P[^"]*)"$') def _add(self, uri): diff --git a/mopidy/session.py b/mopidy/session.py index 4d39549d..6de5bbe2 100644 --- a/mopidy/session.py +++ b/mopidy/session.py @@ -44,17 +44,8 @@ class MpdSession(asynchat.async_chat): self.send_response(u'ACK %s' % e) def handle_response(self, response): - if isinstance(response, list): - for line in response: - self.handle_response(line) - elif isinstance(response, dict): - for item in response.items(): - self.handle_response(item) - elif isinstance(response, tuple): - (key, value) = response - self.send_response(u'%s: %s' % (key, value)) - elif response is not None: - self.send_response(response) + for line in response: + self.send_response(line) def send_response(self, output): logger.debug(u'Output: %s', output) diff --git a/tests/handlertest.py b/tests/handlertest.py index 2c249592..54dcb097 100644 --- a/tests/handlertest.py +++ b/tests/handlertest.py @@ -91,10 +91,12 @@ class StatusHandlerTest(unittest.TestCase): result = self.h.handle_request(u'idle database playlist') self.assert_(u'OK' in result) - def test_stats(self): + def test_stats_command(self): result = self.h.handle_request(u'stats') self.assert_(u'OK' in result) - result = result[0] + + def test_stats_method(self): + result = self.h._stats() self.assert_('artists' in result) self.assert_(int(result['artists']) >= 0) self.assert_('albums' in result) @@ -110,10 +112,12 @@ class StatusHandlerTest(unittest.TestCase): self.assert_('playtime' in result) self.assert_(int(result['playtime']) >= 0) - def test_status(self): + def test_status_command(self): result = self.h.handle_request(u'status') self.assert_(u'OK' in result) - result = dict(result) + + def test_status_method(self): + result = dict(self.h._status()) self.assert_('volume' in result) self.assert_(int(result['volume']) in xrange(0, 101)) self.assert_('repeat' in result) @@ -551,30 +555,22 @@ class MusicDatabaseHandlerTest(unittest.TestCase): def test_update_without_uri(self): result = self.h.handle_request(u'update') self.assert_(u'OK' in result) - result = result[0] - self.assert_('updating_db' in result) - self.assert_(result['updating_db'] >= 0) + self.assert_(u'updating_db: 0' in result) def test_update_with_uri(self): result = self.h.handle_request(u'update "file:///dev/urandom"') self.assert_(u'OK' in result) - result = result[0] - self.assert_('updating_db' in result) - self.assert_(result['updating_db'] >= 0) + self.assert_(u'updating_db: 0' in result) def test_rescan_without_uri(self): result = self.h.handle_request(u'rescan') self.assert_(u'OK' in result) - result = result[0] - self.assert_('updating_db' in result) - self.assert_(result['updating_db'] >= 0) + self.assert_(u'updating_db: 0' in result) def test_rescan_with_uri(self): result = self.h.handle_request(u'rescan "file:///dev/urandom"') self.assert_(u'OK' in result) - result = result[0] - self.assert_('updating_db' in result) - self.assert_(result['updating_db'] >= 0) + self.assert_(u'updating_db: 0' in result) class StickersHandlerTest(unittest.TestCase):