From d9d6a3d5b69a1fd61b275eddfeed26330d37a3a8 Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Tue, 16 Oct 2012 16:08:46 +0200 Subject: [PATCH] Move exceptions to mopidy.exceptions --- mopidy/__init__.py | 22 ------------------- mopidy/__main__.py | 10 ++++----- mopidy/exceptions.py | 21 ++++++++++++++++++ mopidy/frontends/lastfm.py | 14 +++++------- mopidy/frontends/mpd/exceptions.py | 2 +- mopidy/frontends/mpris/__init__.py | 10 ++++----- mopidy/frontends/mpris/objects.py | 2 +- mopidy/utils/process.py | 4 ++-- mopidy/utils/settings.py | 8 +++---- tests/frontends/mpris/events_test.py | 2 +- .../frontends/mpris/player_interface_test.py | 4 ++-- tests/frontends/mpris/root_interface_test.py | 4 ++-- tests/utils/settings_test.py | 10 ++++----- 13 files changed, 55 insertions(+), 58 deletions(-) create mode 100644 mopidy/exceptions.py diff --git a/mopidy/__init__.py b/mopidy/__init__.py index 2a88666c..ec2f4147 100644 --- a/mopidy/__init__.py +++ b/mopidy/__init__.py @@ -48,28 +48,6 @@ def get_python(): return u' '.join([implementation, version]) -class MopidyException(Exception): - def __init__(self, message, *args, **kwargs): - super(MopidyException, self).__init__(message, *args, **kwargs) - self._message = message - - @property - def message(self): - """Reimplement message field that was deprecated in Python 2.6""" - return self._message - - @message.setter # noqa - def message(self, message): - self._message = message - - -class SettingsError(MopidyException): - pass - - -class OptionalDependencyError(MopidyException): - pass - from mopidy import settings as default_settings_module from mopidy.utils.settings import SettingsProxy settings = SettingsProxy(default_settings_module) diff --git a/mopidy/__main__.py b/mopidy/__main__.py index bfc600f5..a4982362 100644 --- a/mopidy/__main__.py +++ b/mopidy/__main__.py @@ -29,7 +29,7 @@ sys.path.insert( import mopidy -from mopidy import audio, core, settings, utils +from mopidy import audio, core, exceptions, settings, utils from mopidy.utils import log, path, process from mopidy.utils.deps import list_deps_optparse_callback from mopidy.utils.settings import list_settings_optparse_callback @@ -51,7 +51,7 @@ def main(): core_ref = setup_core(audio_ref, backend_ref) setup_frontends(core_ref) loop.run() - except mopidy.SettingsError as ex: + except exceptions.SettingsError as ex: logger.error(ex.message) except KeyboardInterrupt: logger.info(u'Interrupted. Exiting...') @@ -117,7 +117,7 @@ def setup_settings(interactive): path.get_or_create_file(mopidy.SETTINGS_FILE) try: settings.validate(interactive) - except mopidy.SettingsError as ex: + except exceptions.SettingsError as ex: logger.error(ex.message) sys.exit(1) @@ -150,7 +150,7 @@ def setup_frontends(core): for frontend_class_name in settings.FRONTENDS: try: utils.get_class(frontend_class_name).start(core=core) - except mopidy.OptionalDependencyError as ex: + except exceptions.OptionalDependencyError as ex: logger.info(u'Disabled: %s (%s)', frontend_class_name, ex) @@ -158,7 +158,7 @@ def stop_frontends(): for frontend_class_name in settings.FRONTENDS: try: process.stop_actors_by_class(utils.get_class(frontend_class_name)) - except mopidy.OptionalDependencyError: + except exceptions.OptionalDependencyError: pass diff --git a/mopidy/exceptions.py b/mopidy/exceptions.py new file mode 100644 index 00000000..6e0c575e --- /dev/null +++ b/mopidy/exceptions.py @@ -0,0 +1,21 @@ +class MopidyException(Exception): + def __init__(self, message, *args, **kwargs): + super(MopidyException, self).__init__(message, *args, **kwargs) + self._message = message + + @property + def message(self): + """Reimplement message field that was deprecated in Python 2.6""" + return self._message + + @message.setter # noqa + def message(self, message): + self._message = message + + +class SettingsError(MopidyException): + pass + + +class OptionalDependencyError(MopidyException): + pass diff --git a/mopidy/frontends/lastfm.py b/mopidy/frontends/lastfm.py index 37fbafe2..70c6c8e4 100644 --- a/mopidy/frontends/lastfm.py +++ b/mopidy/frontends/lastfm.py @@ -1,16 +1,14 @@ import logging import time +from pykka.actor import ThreadingActor + +from mopidy import core, exceptions, settings + try: import pylast except ImportError as import_error: - from mopidy import OptionalDependencyError - raise OptionalDependencyError(import_error) - -from pykka.actor import ThreadingActor - -from mopidy import core, settings, SettingsError - + raise exceptions.OptionalDependencyError(import_error) logger = logging.getLogger('mopidy.frontends.lastfm') @@ -50,7 +48,7 @@ class LastfmFrontend(ThreadingActor, core.CoreListener): api_key=API_KEY, api_secret=API_SECRET, username=username, password_hash=password_hash) logger.info(u'Connected to Last.fm') - except SettingsError as e: + except exceptions.SettingsError as e: logger.info(u'Last.fm scrobbler not started') logger.debug(u'Last.fm settings error: %s', e) self.stop() diff --git a/mopidy/frontends/mpd/exceptions.py b/mopidy/frontends/mpd/exceptions.py index e5844b60..5925d6bc 100644 --- a/mopidy/frontends/mpd/exceptions.py +++ b/mopidy/frontends/mpd/exceptions.py @@ -1,4 +1,4 @@ -from mopidy import MopidyException +from mopidy.exceptions import MopidyException class MpdAckError(MopidyException): diff --git a/mopidy/frontends/mpris/__init__.py b/mopidy/frontends/mpris/__init__.py index 80995adf..cbfb2cc9 100644 --- a/mopidy/frontends/mpris/__init__.py +++ b/mopidy/frontends/mpris/__init__.py @@ -1,5 +1,10 @@ import logging +from pykka.actor import ThreadingActor + +from mopidy import core, settings +from mopidy.frontends.mpris import objects + logger = logging.getLogger('mopidy.frontends.mpris') try: @@ -8,11 +13,6 @@ except ImportError as import_error: indicate = None # noqa logger.debug(u'Startup notification will not be sent (%s)', import_error) -from pykka.actor import ThreadingActor - -from mopidy import core, settings -from mopidy.frontends.mpris import objects - class MprisFrontend(ThreadingActor, core.CoreListener): """ diff --git a/mopidy/frontends/mpris/objects.py b/mopidy/frontends/mpris/objects.py index ee54f91c..74c85617 100644 --- a/mopidy/frontends/mpris/objects.py +++ b/mopidy/frontends/mpris/objects.py @@ -7,7 +7,7 @@ try: import dbus.service import gobject except ImportError as import_error: - from mopidy import OptionalDependencyError + from mopidy.exceptions import OptionalDependencyError raise OptionalDependencyError(import_error) from mopidy import settings diff --git a/mopidy/utils/process.py b/mopidy/utils/process.py index c45659bb..b3f90150 100644 --- a/mopidy/utils/process.py +++ b/mopidy/utils/process.py @@ -6,7 +6,7 @@ import threading from pykka import ActorDeadError from pykka.registry import ActorRegistry -from mopidy import SettingsError +from mopidy import exceptions logger = logging.getLogger('mopidy.utils.process') @@ -59,7 +59,7 @@ class BaseThread(threading.Thread): self.run_inside_try() except KeyboardInterrupt: logger.info(u'Interrupted by user') - except SettingsError as e: + except exceptions.SettingsError as e: logger.error(e.message) except ImportError as e: logger.error(e) diff --git a/mopidy/utils/settings.py b/mopidy/utils/settings.py index 0ecdd827..39d613b3 100644 --- a/mopidy/utils/settings.py +++ b/mopidy/utils/settings.py @@ -8,7 +8,7 @@ import os import pprint import sys -from mopidy import SettingsError, SETTINGS_PATH, SETTINGS_FILE +from mopidy import exceptions, SETTINGS_PATH, SETTINGS_FILE from mopidy.utils import log from mopidy.utils import path @@ -53,11 +53,11 @@ class SettingsProxy(object): current = self.current # bind locally to avoid copying+updates if attr not in current: - raise SettingsError(u'Setting "%s" is not set.' % attr) + raise exceptions.SettingsError(u'Setting "%s" is not set.' % attr) value = current[attr] if isinstance(value, basestring) and len(value) == 0: - raise SettingsError(u'Setting "%s" is empty.' % attr) + raise exceptions.SettingsError(u'Setting "%s" is empty.' % attr) if not value: return value if attr.endswith('_PATH') or attr.endswith('_FILE'): @@ -77,7 +77,7 @@ class SettingsProxy(object): logger.error( u'Settings validation errors: %s', log.indent(self.get_errors_as_string())) - raise SettingsError(u'Settings validation failed.') + raise exceptions.SettingsError(u'Settings validation failed.') def _read_missing_settings_from_stdin(self, current, runtime): for setting, value in sorted(current.iteritems()): diff --git a/tests/frontends/mpris/events_test.py b/tests/frontends/mpris/events_test.py index 241b9365..a4efe344 100644 --- a/tests/frontends/mpris/events_test.py +++ b/tests/frontends/mpris/events_test.py @@ -2,7 +2,7 @@ import sys import mock -from mopidy import OptionalDependencyError +from mopidy.exceptions import OptionalDependencyError from mopidy.models import Track try: diff --git a/tests/frontends/mpris/player_interface_test.py b/tests/frontends/mpris/player_interface_test.py index 6088a94b..5c3d2cae 100644 --- a/tests/frontends/mpris/player_interface_test.py +++ b/tests/frontends/mpris/player_interface_test.py @@ -4,14 +4,14 @@ import mock from pykka.registry import ActorRegistry -from mopidy import core, OptionalDependencyError +from mopidy import core, exceptions from mopidy.backends import dummy from mopidy.core import PlaybackState from mopidy.models import Album, Artist, Track try: from mopidy.frontends.mpris import objects -except OptionalDependencyError: +except exceptions.OptionalDependencyError: pass from tests import unittest diff --git a/tests/frontends/mpris/root_interface_test.py b/tests/frontends/mpris/root_interface_test.py index 847ed2de..8f37cc47 100644 --- a/tests/frontends/mpris/root_interface_test.py +++ b/tests/frontends/mpris/root_interface_test.py @@ -4,12 +4,12 @@ import mock from pykka.registry import ActorRegistry -from mopidy import core, settings, OptionalDependencyError +from mopidy import core, exceptions, settings from mopidy.backends import dummy try: from mopidy.frontends.mpris import objects -except OptionalDependencyError: +except exceptions.OptionalDependencyError: pass from tests import unittest diff --git a/tests/utils/settings_test.py b/tests/utils/settings_test.py index bbeda20c..5ce643cb 100644 --- a/tests/utils/settings_test.py +++ b/tests/utils/settings_test.py @@ -1,6 +1,6 @@ import os -import mopidy +from mopidy import exceptions, settings from mopidy.utils import settings as setting_utils from tests import unittest @@ -79,7 +79,7 @@ class ValidateSettingsTest(unittest.TestCase): class SettingsProxyTest(unittest.TestCase): def setUp(self): - self.settings = setting_utils.SettingsProxy(mopidy.settings) + self.settings = setting_utils.SettingsProxy(settings) self.settings.local.clear() def test_set_and_get_attr(self): @@ -90,7 +90,7 @@ class SettingsProxyTest(unittest.TestCase): try: self.settings.TEST self.fail(u'Should raise exception') - except mopidy.SettingsError as e: + except exceptions.SettingsError as e: self.assertEqual(u'Setting "TEST" is not set.', e.message) def test_getattr_raises_error_on_empty_setting(self): @@ -98,7 +98,7 @@ class SettingsProxyTest(unittest.TestCase): try: self.settings.TEST self.fail(u'Should raise exception') - except mopidy.SettingsError as e: + except exceptions.SettingsError as e: self.assertEqual(u'Setting "TEST" is empty.', e.message) def test_getattr_does_not_raise_error_if_setting_is_false(self): @@ -184,7 +184,7 @@ class SettingsProxyTest(unittest.TestCase): class FormatSettingListTest(unittest.TestCase): def setUp(self): - self.settings = setting_utils.SettingsProxy(mopidy.settings) + self.settings = setting_utils.SettingsProxy(settings) def test_contains_the_setting_name(self): self.settings.TEST = u'test'