Skip to content

Commit

Permalink
Allow plugins to define early import stage functions
Browse files Browse the repository at this point in the history
  • Loading branch information
autrimpo committed Feb 19, 2018
1 parent bfeb678 commit b140f24
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 0 deletions.
2 changes: 2 additions & 0 deletions beets/importer.py
Original file line number Diff line number Diff line change
Expand Up @@ -313,6 +313,8 @@ def run(self):
stages += [import_asis(self)]

# Plugin stages.
for stage_func in plugins.early_import_stages():
stages.append(plugin_stage(self, stage_func))
for stage_func in plugins.import_stages():
stages.append(plugin_stage(self, stage_func))

Expand Down
20 changes: 20 additions & 0 deletions beets/plugins.py
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ def __init__(self, name=None):
self.template_fields = {}
if not self.album_template_fields:
self.album_template_fields = {}
self.early_import_stages = []
self.import_stages = []

self._log = log.getChild(self.name)
Expand All @@ -94,6 +95,17 @@ def commands(self):
"""
return ()

def get_early_import_stages(self):
"""Return a list of functions that should be called as importer
pipelines stages early in the pipeline.
The callables are wrapped versions of the functions in
`self.early_import_stages`. Wrapping provides some bookkeeping for the
plugin: specifically, the logging level is adjusted to WARNING.
"""
return [self._set_log_level_and_params(logging.WARNING, import_stage)
for import_stage in self.early_import_stages]

def get_import_stages(self):
"""Return a list of functions that should be called as importer
pipelines stages.
Expand Down Expand Up @@ -393,6 +405,14 @@ def template_funcs():
return funcs


def early_import_stages():
"""Get a list of early import stage functions defined by plugins."""
stages = []
for plugin in find_plugins():
stages += plugin.get_early_import_stages()
return stages


def import_stages():
"""Get a list of import stage functions defined by plugins."""
stages = []
Expand Down

0 comments on commit b140f24

Please sign in to comment.