diff --git a/beets/library.py b/beets/library.py index 4b4563d60..7d02c32d1 100644 --- a/beets/library.py +++ b/beets/library.py @@ -333,11 +333,12 @@ class Item(LibModel): _flex_table = 'item_attributes' _search_fields = ITEM_DEFAULT_FIELDS - media_fields = set(MediaFile.readable_fields()).intersection(ITEM_KEYS) - """Set of property names to read from ``MediaFile``. + _media_fields = set(MediaFile.readable_fields()).intersection(ITEM_KEYS) + """Set of item fields that are backed by `MediaFile` fields. - ``item.read()`` will read all properties in this set from - ``MediaFile`` and set them on the item. + Any kind of field (fixed, flexible, and computed) may be a media + field. Only these fields are read from disk in `read` and written in + `write`. """ @classmethod @@ -393,7 +394,7 @@ class Item(LibModel): """Read the metadata from the associated file. If ``read_path`` is specified, read metadata from that file - instead. Updates all the properties in ``Item.media_fields`` + instead. Updates all the properties in `_media_fields` from the media file. Raises a `ReadError` if the file could not be read. @@ -407,7 +408,7 @@ class Item(LibModel): except (OSError, IOError) as exc: raise ReadError(read_path, exc) - for key in list(self.media_fields): + for key in list(self._media_fields): value = getattr(mediafile, key) if isinstance(value, (int, long)): # Filter values wider than 64 bits (in signed representation). diff --git a/beets/plugins.py b/beets/plugins.py index 18bc3290c..4b4a0d090 100755 --- a/beets/plugins.py +++ b/beets/plugins.py @@ -111,7 +111,7 @@ class BeetsPlugin(object): # Defer impor to prevent circular dependency from beets import library mediafile.MediaFile.add_field(name, descriptor) - library.Item.media_fields.add(name) + library.Item._media_fields.add(name) listeners = None diff --git a/beets/ui/commands.py b/beets/ui/commands.py index f22837d05..d83f60a77 100644 --- a/beets/ui/commands.py +++ b/beets/ui/commands.py @@ -919,7 +919,7 @@ def update_items(lib, query, album, move, pretend): # Check for and display changes. changed = ui.show_model_changes(item, - fields=library.Item.media_fields) + fields=library.Item._media_fields) # Save changes. if not pretend: @@ -1246,7 +1246,7 @@ def write_items(lib, query, pretend): # Check for and display changes. changed = ui.show_model_changes(item, clean_item, - library.Item.media_fields, + library.Item._media_fields, always=True) if changed and not pretend: try: diff --git a/test/test_mediafile.py b/test/test_mediafile.py index bcf80ccbe..6f86f6c88 100644 --- a/test/test_mediafile.py +++ b/test/test_mediafile.py @@ -274,7 +274,7 @@ class ExtendedFieldTestMixin(object): mediafile = MediaFile(mediafile.path) self.assertEqual(mediafile.initialkey, 'F#') delattr(MediaFile, 'initialkey') - Item.media_fields.remove('initialkey') + Item._media_fields.remove('initialkey') def test_write_extended_tag_from_item(self): plugin = BeetsPlugin() @@ -289,7 +289,7 @@ class ExtendedFieldTestMixin(object): self.assertEqual(mediafile.initialkey, 'Gb') delattr(MediaFile, 'initialkey') - Item.media_fields.remove('initialkey') + Item._media_fields.remove('initialkey') def test_read_flexible_attribute_from_file(self): plugin = BeetsPlugin() @@ -302,7 +302,7 @@ class ExtendedFieldTestMixin(object): self.assertEqual(item['initialkey'], 'F#') delattr(MediaFile, 'initialkey') - Item.media_fields.remove('initialkey') + Item._media_fields.remove('initialkey') def test_invalid_descriptor(self): with self.assertRaises(ValueError) as cm: