MPD: Add correct index to error message when error happens while processing a command list

This commit is contained in:
Stein Magnus Jodal 2010-06-24 19:59:21 +02:00
parent 95f83c8102
commit 1aa5963697
2 changed files with 12 additions and 7 deletions

View File

@ -60,7 +60,7 @@ class MpdFrontend(object):
self.command_list = False
self.command_list_ok = False
def handle_request(self, request, add_ok=True):
def handle_request(self, request, command_list_index=None):
if self.command_list is not False and request != u'command_list_end':
self.command_list.append(request)
return None
@ -68,10 +68,14 @@ class MpdFrontend(object):
(handler, kwargs) = self.find_handler(request)
result = handler(self, **kwargs)
except MpdAckError as e:
if command_list_index is not None:
e.index = command_list_index
return self.handle_response(e.get_mpd_ack(), add_ok=False)
if request in (u'command_list_begin', u'command_list_ok_begin'):
return None
return self.handle_response(result, add_ok)
if command_list_index is not None:
return self.handle_response(result, add_ok=False)
return self.handle_response(result)
def find_handler(self, request):
for pattern in _request_handlers:
@ -175,8 +179,8 @@ class MpdFrontend(object):
(command_list, self.command_list) = (self.command_list, False)
(command_list_ok, self.command_list_ok) = (self.command_list_ok, False)
result = []
for command in command_list:
response = self.handle_request(command, add_ok=False)
for i, command in enumerate(command_list):
response = self.handle_request(command, command_list_index=i)
if response is not None:
result.append(response)
if response and response[-1].startswith(u'ACK'):

View File

@ -82,11 +82,12 @@ class CommandListsTest(unittest.TestCase):
self.assert_(u'OK' in result)
self.assertEqual(False, self.h.command_list)
def test_command_list_with_error(self):
def test_command_list_with_error_returns_ack_with_correct_index(self):
self.h.handle_request(u'command_list_begin')
self.h.handle_request(u'ack')
self.h.handle_request(u'play') # Known command
self.h.handle_request(u'paly') # Unknown command
result = self.h.handle_request(u'command_list_end')
self.assert_(u'ACK' in result[-1])
self.assertEqual(result[0], u'ACK [5@1] {} unknown command "paly"')
def test_command_list_ok_begin(self):
result = self.h.handle_request(u'command_list_ok_begin')