diff --git a/picard/album.py b/picard/album.py index 95a9c3f38..cbaf7febb 100644 --- a/picard/album.py +++ b/picard/album.py @@ -82,7 +82,7 @@ from picard.plugin import ( from picard.script import ( ScriptError, ScriptParser, - enabled_tagger_scripts_texts, + iter_active_tagging_scripts, ) from picard.track import Track from picard.util import ( @@ -474,21 +474,21 @@ class Album(DataObject, MetadataItem): track.metadata_images_changed.connect(self.update_metadata_images) # Prepare parser for user's script - for s_name, s_text in enabled_tagger_scripts_texts(): + for script in iter_active_tagging_scripts(): parser = ScriptParser() for track in self._new_tracks: # Run tagger script for each track try: - parser.eval(s_text, track.metadata) + parser.eval(script.content, track.metadata) except ScriptError: - log.exception("Failed to run tagger script %s on track", s_name) + log.exception("Failed to run tagger script %s on track", script.name) track.metadata.strip_whitespace() track.scripted_metadata.update(track.metadata) # Run tagger script for the album itself try: - parser.eval(s_text, self._new_metadata) + parser.eval(script.content, self._new_metadata) except ScriptError: - log.exception("Failed to run tagger script %s on album", s_name) + log.exception("Failed to run tagger script %s on album", script.name) self._new_metadata.strip_whitespace() unmatched_files = [file for track in self.tracks for file in track.files] diff --git a/picard/script/__init__.py b/picard/script/__init__.py index 918c7180f..10d34c31a 100644 --- a/picard/script/__init__.py +++ b/picard/script/__init__.py @@ -136,13 +136,15 @@ def script_function_documentation_all(fmt='markdown', pre='', return "\n".join(doc_elements) -def enabled_tagger_scripts_texts(): - """Returns an iterator over the enabled tagger scripts. - For each script, you'll get a tuple consisting of the script name and text""" - config = get_config() +def iter_active_tagging_scripts(config=None): + """Returns an iterator over the enabled and not empty tagging scripts.""" + if config is None: + config = get_config() if not config.setting['enable_tagger_scripts']: - return [] - return [(s.name, s.content) for s in iter_tagging_scripts_from_config(config=config) if s.enabled and s.content] + return + for script in iter_tagging_scripts_from_config(config=config): + if script.enabled and script.content: + yield script def get_file_naming_script(settings): diff --git a/picard/track.py b/picard/track.py index d3c35cd77..7d42fd3ff 100644 --- a/picard/track.py +++ b/picard/track.py @@ -71,7 +71,7 @@ from picard.metadata import ( from picard.script import ( ScriptError, ScriptParser, - enabled_tagger_scripts_texts, + iter_active_tagging_scripts, ) from picard.util import pattern_as_regex from picard.util.imagelist import ImageList @@ -201,12 +201,12 @@ class Track(DataObject, FileListItem): @staticmethod def run_scripts(metadata, strip_whitespace=False): - for s_name, s_text in enabled_tagger_scripts_texts(): + for script in iter_active_tagging_scripts(): parser = ScriptParser() try: - parser.eval(s_text, metadata) + parser.eval(script.content, metadata) except ScriptError: - log.exception("Failed to run tagger script %s on track", s_name) + log.exception("Failed to run tagger script %s on track", script.name) if strip_whitespace: metadata.strip_whitespace()