diff --git a/beets/plugins.py b/beets/plugins.py index ec68d7039..b7d2f968b 100755 --- a/beets/plugins.py +++ b/beets/plugins.py @@ -18,6 +18,7 @@ import traceback import inspect import re from collections import defaultdict +from functools import wraps import beets @@ -51,7 +52,7 @@ class BeetsPlugin(object): def __init__(self, name=None): """Perform one-time plugin setup. """ - self.import_stages = [] + self._import_stages = [] self.name = name or self.__module__.split('.')[-1] self.config = beets.config[self.name] if not self.template_funcs: @@ -63,7 +64,7 @@ class BeetsPlugin(object): logger_name = '{0}.{1}'.format('beets', self.name) self._log = logging.getLogger(logger_name) - self._log.setLevel(logging.WARNING) + self._log.setLevel(logging.INFO) def commands(self): """Should return a list of beets.ui.Subcommand objects for @@ -71,6 +72,20 @@ class BeetsPlugin(object): """ return () + def import_stages(self): + return [self._set_log_level(logging.WARNING, import_stage) + for import_stage in self._import_stages] + + def _set_log_level(self, log_level, func): + @wraps(func) + def wrapper(*args, **kwargs): + old_log_level = self._log.getEffectiveLevel() + self._log.setLevel(log_level) + result = func(*args, **kwargs) + self._log.setLevel(old_log_level) + return result + return wrapper + def queries(self): """Should return a dict mapping prefixes to Query subclasses. """ @@ -353,8 +368,7 @@ def import_stages(): """Get a list of import stage functions defined by plugins.""" stages = [] for plugin in find_plugins(): - if hasattr(plugin, 'import_stages'): - stages += plugin.import_stages + stages += plugin.import_stages() return stages diff --git a/beetsplug/convert.py b/beetsplug/convert.py index 3b0bb4244..610591e94 100644 --- a/beetsplug/convert.py +++ b/beetsplug/convert.py @@ -365,7 +365,7 @@ class ConvertPlugin(BeetsPlugin): u'never_convert_lossy_files': False, u'copy_album_art': False, }) - self.import_stages = [self.auto_convert] + self._import_stages = [self.auto_convert] def commands(self): cmd = ui.Subcommand('convert', help='convert to external location') diff --git a/beetsplug/echonest.py b/beetsplug/echonest.py index 850a7e1be..e52f48ff5 100644 --- a/beetsplug/echonest.py +++ b/beetsplug/echonest.py @@ -139,7 +139,7 @@ class EchonestMetadataPlugin(plugins.BeetsPlugin): config['echonest']['apikey'].get(unicode) if self.config['auto']: - self.import_stages = [self.imported] + self._import_stages = [self.imported] def _echofun(self, func, **kwargs): """Wrapper for requests to the EchoNest API. Will retry up to diff --git a/beetsplug/fetchart.py b/beetsplug/fetchart.py index f593f0e3a..a1bb37480 100644 --- a/beetsplug/fetchart.py +++ b/beetsplug/fetchart.py @@ -336,7 +336,7 @@ class FetchArtPlugin(plugins.BeetsPlugin): self.maxwidth = self.config['maxwidth'].get(int) if self.config['auto']: # Enable two import hooks when fetching is enabled. - self.import_stages = [self.fetch_art] + self._import_stages = [self.fetch_art] self.register_listener('import_task_files', self.assign_art) available_sources = list(SOURCES_ALL) diff --git a/beetsplug/ftintitle.py b/beetsplug/ftintitle.py index 7c48a4653..b72113e4c 100644 --- a/beetsplug/ftintitle.py +++ b/beetsplug/ftintitle.py @@ -128,7 +128,7 @@ class FtInTitlePlugin(plugins.BeetsPlugin): help='drop featuring from artists and ignore title update') if self.config['auto']: - self.import_stages = [self.imported] + self._import_stages = [self.imported] def commands(self): diff --git a/beetsplug/keyfinder.py b/beetsplug/keyfinder.py index 6298ce6ca..726b85364 100644 --- a/beetsplug/keyfinder.py +++ b/beetsplug/keyfinder.py @@ -36,7 +36,7 @@ class KeyFinderPlugin(BeetsPlugin): u'overwrite': False, }) self.config['auto'].get(bool) - self.import_stages = [self.imported] + self._import_stages = [self.imported] def commands(self): cmd = ui.Subcommand('keyfinder', diff --git a/beetsplug/lastgenre/__init__.py b/beetsplug/lastgenre/__init__.py index 8ef97c6d2..bee44ffc0 100644 --- a/beetsplug/lastgenre/__init__.py +++ b/beetsplug/lastgenre/__init__.py @@ -145,7 +145,7 @@ class LastGenrePlugin(plugins.BeetsPlugin): """Setup plugin from config options """ if self.config['auto']: - self.import_stages = [self.imported] + self._import_stages = [self.imported] self._genre_cache = {} diff --git a/beetsplug/lyrics.py b/beetsplug/lyrics.py index 2f889ac8d..3c413c49e 100644 --- a/beetsplug/lyrics.py +++ b/beetsplug/lyrics.py @@ -442,7 +442,7 @@ SOURCE_BACKENDS = { class LyricsPlugin(plugins.BeetsPlugin): def __init__(self): super(LyricsPlugin, self).__init__() - self.import_stages = [self.imported] + self._import_stages = [self.imported] self.config.add({ 'auto': True, 'google_API_key': None, diff --git a/beetsplug/mbcollection.py b/beetsplug/mbcollection.py index 870e337d9..52a0cef39 100644 --- a/beetsplug/mbcollection.py +++ b/beetsplug/mbcollection.py @@ -105,7 +105,7 @@ class MusicBrainzCollectionPlugin(BeetsPlugin): ) self.config.add({'auto': False}) if self.config['auto']: - self.import_stages = [self.imported] + self._import_stages = [self.imported] def commands(self): return [update_mb_collection_cmd] diff --git a/beetsplug/replaygain.py b/beetsplug/replaygain.py index 6cf83161a..b1a593dab 100644 --- a/beetsplug/replaygain.py +++ b/beetsplug/replaygain.py @@ -601,7 +601,7 @@ class ReplayGainPlugin(BeetsPlugin): def __init__(self): super(ReplayGainPlugin, self).__init__() - self.import_stages = [self.imported] + self._import_stages = [self.imported] # default backend is 'command' for backward-compatibility. self.config.add({