diff --git a/beets/mediafile.py b/beets/mediafile.py index 48fd0942f..b25184727 100644 --- a/beets/mediafile.py +++ b/beets/mediafile.py @@ -251,15 +251,10 @@ def _sc_encode(gain, peak): def _image_mime_type(data): - """Return the MIME type (either image/png or image/jpeg) of the - image data (a bytestring). + """Return the MIME type of the image data (a bytestring). """ kind = imghdr.what(None, h=data) - if kind == 'png': - return 'image/png' - else: - # Currently just fall back to JPEG. - return 'image/jpeg' + return 'image/{0}'.format(kind) # StorageStyle classes describe strategies for accessing values in # Mutagen file objects. @@ -504,6 +499,8 @@ class MP4ImageStorageStyle(MP4ListStorageStyle): kind = mutagen.mp4.MP4Cover.FORMAT_PNG elif image.mime_type == 'image/jpeg': kind = mutagen.mp4.MP4Cover.FORMAT_JPEG + else: + raise ValueError('The MP4 format only supports PNG and JPEG images') return mutagen.mp4.MP4Cover(image.data, kind) diff --git a/test/test_mediafile.py b/test/test_mediafile.py index 8b4386f5b..c8e878086 100644 --- a/test/test_mediafile.py +++ b/test/test_mediafile.py @@ -46,6 +46,14 @@ class ArtTestMixin(object): return self._jpg_data _jpg_data = None + @property + def tiff_data(self): + if not self._jpg_data: + with open(os.path.join(_common.RSRC, 'image-2x3.tiff'), 'rb') as f: + self._jpg_data = f.read() + return self._jpg_data + _jpg_data = None + def test_set_png_art(self): mediafile = self._mediafile_fixture('empty') mediafile.art = self.png_data @@ -578,6 +586,13 @@ class MP4Test(ReadWriteTestBase, PartialTestMixin, 'bitdepth': 16, 'channels': 2, } + + def test_add_tiff_image_fails(self): + mediafile = self._mediafile_fixture('empty') + with self.assertRaises(ValueError): + mediafile.images = [Image(data=self.tiff_data)] + + class AlacTest(ReadWriteTestBase, GenreListTestMixin, unittest.TestCase): extension = 'alac.m4a' audio_properties = {