From 1498c2cbba60a440d46c73fa0d0b5ac851245782 Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Mon, 29 Mar 2010 20:29:07 +0200 Subject: [PATCH 1/3] Try to fix exception message handling on Solaris and/or Python 2.6.5 --- mopidy/mpd/__init__.py | 7 ++++--- mopidy/mpd/frontend.py | 22 +++++++++++----------- tests/mpd/exception_test.py | 19 +++++++++++++++++++ 3 files changed, 34 insertions(+), 14 deletions(-) create mode 100644 tests/mpd/exception_test.py 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') From 61dadc02b6b33e525a5da94df60af340e868b6bf Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Mon, 29 Mar 2010 20:55:33 +0200 Subject: [PATCH 2/3] Add MopidyException base exception --- mopidy/__init__.py | 15 ++++++++++++++- mopidy/mpd/__init__.py | 7 ++++--- mopidy/mpd/frontend.py | 3 ++- tests/mpd/exception_test.py | 4 ++-- 4 files changed, 22 insertions(+), 7 deletions(-) diff --git a/mopidy/__init__.py b/mopidy/__init__.py index a7ccade1..d94913b0 100644 --- a/mopidy/__init__.py +++ b/mopidy/__init__.py @@ -6,7 +6,20 @@ def get_version(): def get_mpd_protocol_version(): return u'0.16.0' -class SettingsError(Exception): +class MopidyException(Exception): + def __init__(self, message): + self.message = message + + @property + def message(self): + """Reimplement message field that was deprecated in Python 2.6""" + return self._message + + @message.setter + def message(self, message): + self._message = message + +class SettingsError(MopidyException): pass class Settings(object): diff --git a/mopidy/mpd/__init__.py b/mopidy/mpd/__init__.py index afb125ee..c0685891 100644 --- a/mopidy/mpd/__init__.py +++ b/mopidy/mpd/__init__.py @@ -1,6 +1,7 @@ -class MpdAckError(Exception): - def __init__(self, msg): - self.msg = msg +from mopidy import MopidyException + +class MpdAckError(MopidyException): + pass class MpdNotImplemented(MpdAckError): def __init__(self): diff --git a/mopidy/mpd/frontend.py b/mopidy/mpd/frontend.py index 5a1fa3d9..6a4cf098 100644 --- a/mopidy/mpd/frontend.py +++ b/mopidy/mpd/frontend.py @@ -65,7 +65,8 @@ class MpdFrontend(object): try: result = _request_handlers[pattern](self, **groups) except MpdAckError as e: - return self.handle_response(u'ACK %s' % e.msg, add_ok=False) + return self.handle_response(u'ACK %s' % e.message, + add_ok=False) if self.command_list is not False: return None else: diff --git a/tests/mpd/exception_test.py b/tests/mpd/exception_test.py index 61dd262b..07701d0d 100644 --- a/tests/mpd/exception_test.py +++ b/tests/mpd/exception_test.py @@ -10,10 +10,10 @@ class MpdExceptionsTest(unittest.TestCase): except KeyError as e: raise MpdAckError(unicode(e)) except MpdAckError as e: - self.assertEqual(e.msg, u'Track X not found') + self.assertEqual(e.message, 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') + self.assertEqual(e.message, u'Not implemented') From bcd9fd66e84865058fd626bccfcaad2e6ddfc84a Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Mon, 29 Mar 2010 20:56:29 +0200 Subject: [PATCH 3/3] Use index to get KeyError message instead of unicode() as its behaviour varies between Solaris/Py2.6.5 and Ubuntu/Py2.6.4 --- mopidy/mpd/frontend.py | 10 +++++----- tests/mpd/exception_test.py | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/mopidy/mpd/frontend.py b/mopidy/mpd/frontend.py index 6a4cf098..7949f3a2 100644 --- a/mopidy/mpd/frontend.py +++ b/mopidy/mpd/frontend.py @@ -303,7 +303,7 @@ class MpdFrontend(object): track = self.backend.current_playlist.get_by_id(songid) return self.backend.current_playlist.remove(track) except KeyError as e: - raise MpdAckError(unicode(e)) + raise MpdAckError(e[0]) @handle_pattern(r'^clear$') def _current_playlist_clear(self): @@ -410,7 +410,7 @@ class MpdFrontend(object): track = self.backend.current_playlist.get_by_id(songid) return track.mpd_format() except KeyError as e: - raise MpdAckError(unicode(e)) + raise MpdAckError(e[0]) else: return self.backend.current_playlist.playlist.mpd_format() @@ -823,7 +823,7 @@ class MpdFrontend(object): track = self.backend.current_playlist.get_by_id(songid) return self.backend.playback.play(track) except KeyError as e: - raise MpdAckError(unicode(e)) + raise MpdAckError(e[0]) @handle_pattern(r'^play "(?P\d+)"$') def _playback_playpos(self, songpos): @@ -1333,7 +1333,7 @@ class MpdFrontend(object): return ['file: %s' % t.uri for t in self.backend.stored_playlists.get_by_name(name).tracks] except KeyError as e: - raise MpdAckError(unicode(e)) + raise MpdAckError(e[0]) @handle_pattern(r'^listplaylistinfo "(?P[^"]+)"$') def _stored_playlists_listplaylistinfo(self, name): @@ -1353,7 +1353,7 @@ class MpdFrontend(object): return self.backend.stored_playlists.get_by_name(name).mpd_format( search_result=True) except KeyError as e: - raise MpdAckError(unicode(e)) + raise MpdAckError(e[0]) @handle_pattern(r'^listplaylists$') def _stored_playlists_listplaylists(self): diff --git a/tests/mpd/exception_test.py b/tests/mpd/exception_test.py index 07701d0d..029063e8 100644 --- a/tests/mpd/exception_test.py +++ b/tests/mpd/exception_test.py @@ -6,9 +6,9 @@ class MpdExceptionsTest(unittest.TestCase): def test_key_error_wrapped_in_mpd_ack_error(self): try: try: - raise KeyError('Track X not found') + raise KeyError(u'Track X not found') except KeyError as e: - raise MpdAckError(unicode(e)) + raise MpdAckError(e[0]) except MpdAckError as e: self.assertEqual(e.message, u'Track X not found')