mediafile: Test deleting images and implement it for MP3s

This commit is contained in:
Thomas Scholtes 2014-12-01 17:20:16 +01:00
parent 7c08830113
commit 9d3729dc5e
3 changed files with 30 additions and 12 deletions

View file

@ -821,6 +821,9 @@ class MP3ImageStorageStyle(ListStorageStyle, MP3StorageStyle):
def store(self, mutagen_file, frames):
mutagen_file.tags.setall(self.key, frames)
def delete(self, mutagen_file):
mutagen_file.tags.delall(self.key)
def serialize(self, image):
"""Return an APIC frame populated with data from ``image``.
"""
@ -1257,7 +1260,7 @@ class CoverArtField(MediaField):
delattr(mediafile, 'images')
class ImageListField(MediaField):
class ImageListField(ListMediaField):
"""Descriptor to access the list of images embedded in tags.
The getter returns a list of `Image` instances obtained from
@ -1275,18 +1278,9 @@ class ImageListField(MediaField):
VorbisImageStorageStyle(),
FlacImageStorageStyle(),
APEv2ImageStorageStyle(),
out_type=Image,
)
def __get__(self, mediafile, _):
images = []
for style in self.styles(mediafile.mgfile):
images.extend(style.get_list(mediafile.mgfile))
return images
def __set__(self, mediafile, images):
for style in self.styles(mediafile.mgfile):
style.set_list(mediafile.mgfile, images)
# MediaFile is a collection of fields.

View file

@ -276,5 +276,5 @@ def clear(lib, query):
displayable_path(item.path), exc
))
continue
mf.art = None
del mf.art
mf.save()

View file

@ -74,6 +74,20 @@ class ArtTestMixin(object):
mediafile = MediaFile(mediafile.path)
self.assertEqual(mediafile.art, self.jpg_data)
def test_delete_art(self):
mediafile = self._mediafile_fixture('empty')
mediafile.art = self.jpg_data
mediafile.save()
mediafile = MediaFile(mediafile.path)
self.assertIsNotNone(mediafile.art)
del mediafile.art
mediafile.save()
mediafile = MediaFile(mediafile.path)
self.assertIsNone(mediafile.art)
class ImageStructureTestMixin(ArtTestMixin):
"""Test reading and writing multiple image tags.
@ -134,6 +148,16 @@ class ImageStructureTestMixin(ArtTestMixin):
image, desc='the composer', type=ImageType.composer
)
def test_delete_image_structures(self):
mediafile = self._mediafile_fixture('image')
self.assertEqual(len(mediafile.images), 2)
del mediafile.images
mediafile.save()
mediafile = MediaFile(mediafile.path)
self.assertEqual(len(mediafile.images), 0)
def assertExtendedImageAttributes(self, image, **kwargs):
"""Ignore extended image attributes in the base tests.
"""