Move most of handle_response from session to handler
This commit is contained in:
parent
814eb98b83
commit
46bc8798f8
@ -45,14 +45,28 @@ class MpdHandler(object):
|
|||||||
result = _request_handlers[pattern](self, **groups)
|
result = _request_handlers[pattern](self, **groups)
|
||||||
if self.command_list is not False:
|
if self.command_list is not False:
|
||||||
return None
|
return None
|
||||||
|
else:
|
||||||
|
return self.handle_response(result, add_ok)
|
||||||
|
raise MpdAckError(u'Unknown command: %s' % request)
|
||||||
|
|
||||||
|
def handle_response(self, result, add_ok=True):
|
||||||
response = []
|
response = []
|
||||||
if result is not None:
|
if result is None:
|
||||||
response.append(result)
|
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:
|
if add_ok:
|
||||||
response.append(u'OK')
|
response.append(u'OK')
|
||||||
return flatten(response)
|
return response
|
||||||
logger.warning(u'Unhandled request: %s', request)
|
|
||||||
raise MpdAckError(u'Unhandled request: %s' % request)
|
|
||||||
|
|
||||||
@register(r'^add "(?P<uri>[^"]*)"$')
|
@register(r'^add "(?P<uri>[^"]*)"$')
|
||||||
def _add(self, uri):
|
def _add(self, uri):
|
||||||
|
|||||||
@ -44,17 +44,8 @@ class MpdSession(asynchat.async_chat):
|
|||||||
self.send_response(u'ACK %s' % e)
|
self.send_response(u'ACK %s' % e)
|
||||||
|
|
||||||
def handle_response(self, response):
|
def handle_response(self, response):
|
||||||
if isinstance(response, list):
|
|
||||||
for line in response:
|
for line in response:
|
||||||
self.handle_response(line)
|
self.send_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)
|
|
||||||
|
|
||||||
def send_response(self, output):
|
def send_response(self, output):
|
||||||
logger.debug(u'Output: %s', output)
|
logger.debug(u'Output: %s', output)
|
||||||
|
|||||||
@ -91,10 +91,12 @@ class StatusHandlerTest(unittest.TestCase):
|
|||||||
result = self.h.handle_request(u'idle database playlist')
|
result = self.h.handle_request(u'idle database playlist')
|
||||||
self.assert_(u'OK' in result)
|
self.assert_(u'OK' in result)
|
||||||
|
|
||||||
def test_stats(self):
|
def test_stats_command(self):
|
||||||
result = self.h.handle_request(u'stats')
|
result = self.h.handle_request(u'stats')
|
||||||
self.assert_(u'OK' in result)
|
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_('artists' in result)
|
||||||
self.assert_(int(result['artists']) >= 0)
|
self.assert_(int(result['artists']) >= 0)
|
||||||
self.assert_('albums' in result)
|
self.assert_('albums' in result)
|
||||||
@ -110,10 +112,12 @@ class StatusHandlerTest(unittest.TestCase):
|
|||||||
self.assert_('playtime' in result)
|
self.assert_('playtime' in result)
|
||||||
self.assert_(int(result['playtime']) >= 0)
|
self.assert_(int(result['playtime']) >= 0)
|
||||||
|
|
||||||
def test_status(self):
|
def test_status_command(self):
|
||||||
result = self.h.handle_request(u'status')
|
result = self.h.handle_request(u'status')
|
||||||
self.assert_(u'OK' in result)
|
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_('volume' in result)
|
||||||
self.assert_(int(result['volume']) in xrange(0, 101))
|
self.assert_(int(result['volume']) in xrange(0, 101))
|
||||||
self.assert_('repeat' in result)
|
self.assert_('repeat' in result)
|
||||||
@ -551,30 +555,22 @@ class MusicDatabaseHandlerTest(unittest.TestCase):
|
|||||||
def test_update_without_uri(self):
|
def test_update_without_uri(self):
|
||||||
result = self.h.handle_request(u'update')
|
result = self.h.handle_request(u'update')
|
||||||
self.assert_(u'OK' in result)
|
self.assert_(u'OK' in result)
|
||||||
result = result[0]
|
self.assert_(u'updating_db: 0' in result)
|
||||||
self.assert_('updating_db' in result)
|
|
||||||
self.assert_(result['updating_db'] >= 0)
|
|
||||||
|
|
||||||
def test_update_with_uri(self):
|
def test_update_with_uri(self):
|
||||||
result = self.h.handle_request(u'update "file:///dev/urandom"')
|
result = self.h.handle_request(u'update "file:///dev/urandom"')
|
||||||
self.assert_(u'OK' in result)
|
self.assert_(u'OK' in result)
|
||||||
result = result[0]
|
self.assert_(u'updating_db: 0' in result)
|
||||||
self.assert_('updating_db' in result)
|
|
||||||
self.assert_(result['updating_db'] >= 0)
|
|
||||||
|
|
||||||
def test_rescan_without_uri(self):
|
def test_rescan_without_uri(self):
|
||||||
result = self.h.handle_request(u'rescan')
|
result = self.h.handle_request(u'rescan')
|
||||||
self.assert_(u'OK' in result)
|
self.assert_(u'OK' in result)
|
||||||
result = result[0]
|
self.assert_(u'updating_db: 0' in result)
|
||||||
self.assert_('updating_db' in result)
|
|
||||||
self.assert_(result['updating_db'] >= 0)
|
|
||||||
|
|
||||||
def test_rescan_with_uri(self):
|
def test_rescan_with_uri(self):
|
||||||
result = self.h.handle_request(u'rescan "file:///dev/urandom"')
|
result = self.h.handle_request(u'rescan "file:///dev/urandom"')
|
||||||
self.assert_(u'OK' in result)
|
self.assert_(u'OK' in result)
|
||||||
result = result[0]
|
self.assert_(u'updating_db: 0' in result)
|
||||||
self.assert_('updating_db' in result)
|
|
||||||
self.assert_(result['updating_db'] >= 0)
|
|
||||||
|
|
||||||
|
|
||||||
class StickersHandlerTest(unittest.TestCase):
|
class StickersHandlerTest(unittest.TestCase):
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user