diff --git a/mopidy/mpd/__init__.py b/mopidy/mpd/__init__.py index 8f352807..afb125ee 100644 --- a/mopidy/mpd/__init__.py +++ b/mopidy/mpd/__init__.py @@ -1,6 +1,7 @@ class MpdAckError(Exception): - pass + def __init__(self, msg): + self.msg = msg class MpdNotImplemented(MpdAckError): - def __init__(self, *args): - super(MpdNotImplemented, self).__init__(u'Not implemented', *args) + def __init__(self): + super(MpdNotImplemented, self).__init__(u'Not implemented') diff --git a/mopidy/mpd/frontend.py b/mopidy/mpd/frontend.py index 7a402ebe..5a1fa3d9 100644 --- a/mopidy/mpd/frontend.py +++ b/mopidy/mpd/frontend.py @@ -64,8 +64,8 @@ class MpdFrontend(object): groups = matches.groupdict() try: result = _request_handlers[pattern](self, **groups) - except MpdAckError, e: - return self.handle_response(u'ACK %s' % e, add_ok=False) + except MpdAckError as e: + return self.handle_response(u'ACK %s' % e.msg, add_ok=False) if self.command_list is not False: return None else: @@ -285,7 +285,7 @@ class MpdFrontend(object): songpos = int(songpos) track = self.backend.current_playlist.playlist.tracks[songpos] self.backend.current_playlist.remove(track) - except IndexError, e: + except IndexError as e: raise MpdAckError(u'Position out of bounds') @handle_pattern(r'^deleteid "(?P\d+)"$') @@ -301,7 +301,7 @@ class MpdFrontend(object): try: track = self.backend.current_playlist.get_by_id(songid) return self.backend.current_playlist.remove(track) - except KeyError, e: + except KeyError as e: raise MpdAckError(unicode(e)) @handle_pattern(r'^clear$') @@ -408,8 +408,8 @@ class MpdFrontend(object): songid = int(songid) track = self.backend.current_playlist.get_by_id(songid) return track.mpd_format() - except KeyError, e: - raise MpdAckError(e) + except KeyError as e: + raise MpdAckError(unicode(e)) else: return self.backend.current_playlist.playlist.mpd_format() @@ -821,7 +821,7 @@ class MpdFrontend(object): try: track = self.backend.current_playlist.get_by_id(songid) return self.backend.playback.play(track) - except KeyError, e: + except KeyError as e: raise MpdAckError(unicode(e)) @handle_pattern(r'^play "(?P\d+)"$') @@ -1331,8 +1331,8 @@ class MpdFrontend(object): try: return ['file: %s' % t.uri for t in self.backend.stored_playlists.get_by_name(name).tracks] - except KeyError, e: - raise MpdAckError(e) + except KeyError as e: + raise MpdAckError(unicode(e)) @handle_pattern(r'^listplaylistinfo "(?P[^"]+)"$') def _stored_playlists_listplaylistinfo(self, name): @@ -1351,8 +1351,8 @@ class MpdFrontend(object): try: return self.backend.stored_playlists.get_by_name(name).mpd_format( search_result=True) - except KeyError, e: - raise MpdAckError(e) + except KeyError as e: + raise MpdAckError(unicode(e)) @handle_pattern(r'^listplaylists$') def _stored_playlists_listplaylists(self): diff --git a/tests/mpd/exception_test.py b/tests/mpd/exception_test.py new file mode 100644 index 00000000..61dd262b --- /dev/null +++ b/tests/mpd/exception_test.py @@ -0,0 +1,19 @@ +import unittest + +from mopidy.mpd import MpdAckError, MpdNotImplemented + +class MpdExceptionsTest(unittest.TestCase): + def test_key_error_wrapped_in_mpd_ack_error(self): + try: + try: + raise KeyError('Track X not found') + except KeyError as e: + raise MpdAckError(unicode(e)) + except MpdAckError as e: + self.assertEqual(e.msg, u'Track X not found') + + def test_mpd_not_implemented_is_a_mpd_ack_error(self): + try: + raise MpdNotImplemented + except MpdAckError as e: + self.assertEqual(e.msg, u'Not implemented')