diff --git a/mopidy/__init__.py b/mopidy/__init__.py index 46d55873..7d3052c4 100644 --- a/mopidy/__init__.py +++ b/mopidy/__init__.py @@ -22,6 +22,9 @@ class MopidyException(Exception): 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/core.py b/mopidy/core.py index 06149c82..a97d1e88 100644 --- a/mopidy/core.py +++ b/mopidy/core.py @@ -2,7 +2,7 @@ import logging import multiprocessing import optparse -from mopidy import get_version, settings +from mopidy import get_version, settings, OptionalDependencyError from mopidy.utils import get_class from mopidy.utils.log import setup_logging from mopidy.utils.path import get_or_create_folder, get_or_create_file @@ -69,9 +69,12 @@ class CoreProcess(BaseProcess): def setup_frontends(self, core_queue, backend): frontends = [] for frontend_class_name in settings.FRONTENDS: - frontend = get_class(frontend_class_name)(core_queue, backend) - frontend.start() - frontends.append(frontend) + try: + frontend = get_class(frontend_class_name)(core_queue, backend) + frontend.start() + frontends.append(frontend) + except OptionalDependencyError as e: + logger.info(u'Disabled: %s (%s)', frontend_class_name, e) return frontends def process_message(self, message): diff --git a/mopidy/frontends/lastfm.py b/mopidy/frontends/lastfm.py index 3cab010a..13a8f6b4 100644 --- a/mopidy/frontends/lastfm.py +++ b/mopidy/frontends/lastfm.py @@ -3,8 +3,11 @@ import multiprocessing import socket import time -# TODO Log nice error message if pylast isn't found -import pylast +try: + import pylast +except ImportError as e: + from mopidy import OptionalDependencyError + raise OptionalDependencyError(e) from mopidy import get_version, settings, SettingsError from mopidy.frontends.base import BaseFrontend