From ddf5233daad6bf07b2a792d470f356e1166de163 Mon Sep 17 00:00:00 2001 From: Thomas Scholtes Date: Tue, 11 Mar 2014 17:12:21 +0100 Subject: [PATCH] Add _item_write method and remove duplicate code --- beets/importer.py | 11 ++--------- beets/ui/commands.py | 34 +++++++++++++++------------------- 2 files changed, 17 insertions(+), 28 deletions(-) diff --git a/beets/importer.py b/beets/importer.py index 8e8d5587c..eca578f6f 100644 --- a/beets/importer.py +++ b/beets/importer.py @@ -29,6 +29,7 @@ from beets import dbcore from beets import plugins from beets import util from beets import config +from beets import ui from beets.util import pipeline from beets.util import syspath, normpath, displayable_path from beets.util.enumeration import enum @@ -893,15 +894,7 @@ def manipulate_files(session): item.move(True) if config['import']['write'] and task.should_write_tags(): - # FIXME duplicates code from `ui.commands.write_items`. - try: - item.write() - except (mediafile.UnreadableFileError, - util.FilesystemError, - plugins.BeforeWriteError) as exc: - log.error(u'could not write {0}: {1}'.format( - util.displayable_path(item.path), exc - )) + ui.commands._item_write(item) # Save new paths. with session.lib.transaction(): diff --git a/beets/ui/commands.py b/beets/ui/commands.py index bebdcaa48..dbc6fda3e 100644 --- a/beets/ui/commands.py +++ b/beets/ui/commands.py @@ -76,6 +76,19 @@ def _do_query(lib, query, album, also_items=True): return items, albums +def _item_write(item): + """Wrapper for ``item.write()`` that handles exceptions and logs + errors during user interaction. + """ + try: + item.write() + except (mediafile.UnreadableFileError, + util.FilesystemError, + plugins.BeforeWriteError) as exc: + log.error(u'could not write {0}: {1}'.format( + util.displayable_path(item.path), exc + )) + # fields: Shows a list of available fields for queries and format strings. @@ -1135,16 +1148,7 @@ def modify_items(lib, mods, query, write, move, album, confirm): else: changed_items = changed for item in changed_items: - # FIXME duplicates code from `ui.commands.write_items`. - try: - item.write() - except (mediafile.UnreadableFileError, - util.FilesystemError, - plugins.BeforeWriteError) as exc: - log.error(u'could not write {0}: {1}'.format( - util.displayable_path(item.path), exc - )) - continue + _item_write(item) modify_cmd = ui.Subcommand('modify', help='change metadata fields', aliases=('mod',)) @@ -1241,15 +1245,7 @@ def write_items(lib, query, pretend): changed = ui.show_model_changes(item, clean_item, library.ITEM_KEYS_WRITABLE, always=True) if changed and not pretend: - try: - item.write() - except (mediafile.UnreadableFileError, - util.FilesystemError, - plugins.BeforeWriteError) as exc: - log.error(u'could not write {0}: {1}'.format( - util.displayable_path(item.path), exc - )) - continue + _item_write(item) write_cmd = ui.Subcommand('write', help='write tag information to files') write_cmd.parser.add_option('-p', '--pretend', action='store_true',