Move most of handle_response from session to handler

This commit is contained in:
Stein Magnus Jodal 2009-12-26 03:20:45 +01:00
parent 814eb98b83
commit 46bc8798f8
3 changed files with 36 additions and 35 deletions

View File

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

View File

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

View File

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