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)
|
||||
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):
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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):
|
||||
|
||||
Loading…
Reference in New Issue
Block a user