diff --git a/beets/library.py b/beets/library.py index 7c1bd5075..44ca3540d 100644 --- a/beets/library.py +++ b/beets/library.py @@ -590,13 +590,16 @@ class FormattedItemMapping(dbcore.db.FormattedMapping): if key in Album.item_keys or key not in item._fields.keys(): self.album_keys.append(key) - def get(self, key): + def get(self, key, default=None): if key in self.album_keys: return self.album._get_formatted(key, self.for_path) elif key in self.model_keys: return self.model._get_formatted(key, self.for_path) else: - raise KeyError(key) + if default is None: + raise KeyError(key) + else: + return default def __getitem__(self, key): value = self.get(key) diff --git a/beets/ui/__init__.py b/beets/ui/__init__.py index e798fed2d..00b217850 100644 --- a/beets/ui/__init__.py +++ b/beets/ui/__init__.py @@ -576,8 +576,8 @@ def _field_diff(field, old, new): return None # Get formatted values for output. - oldstr = old.formatted.get(field) or u'' - newstr = new.formatted.get(field) or u'' + oldstr = old.formatted.get(field, u'') + newstr = new.formatted.get(field, u'') # For strings, highlight changes. For others, colorize the whole # thing. diff --git a/test/test_ui.py b/test/test_ui.py index d28587c0a..e1190b621 100644 --- a/test/test_ui.py +++ b/test/test_ui.py @@ -225,6 +225,14 @@ class ModifyTest(_common.TestCase): mediafile = MediaFile(item.path) self.assertEqual(mediafile.initial_key, 'C#m') + def test_remove_flexattr(self): + self._modify(["flexattr=testAttr"], write=True) + item = self.lib.items().get() + self.assertEqual(item.flexattr, 'testAttr') + self._modify(dels=["flexattr"], write=True) + item = self.lib.items().get() + self.assertTrue("flexattr" not in item) + @unittest.skip('not yet implemented') def test_delete_initial_key_tag(self): item = self.i