Skip to content
Snippets Groups Projects
Verified Commit 4a3c21a0 authored by Eliot Berriot's avatar Eliot Berriot
Browse files

Importer will now pick embedded images in files with OTHER type if no COVER_FRONT is present

parent 11728bbb
No related branches found
No related tags found
No related merge requests found
......@@ -409,8 +409,14 @@ class Metadata(object):
return data
def get_picture(self, picture_type="cover_front"):
ptype = getattr(mutagen.id3.PictureType, picture_type.upper())
def get_picture(self, *picture_types):
if not picture_types:
raise ValueError("You need to request at least one picture type")
ptypes = [
getattr(mutagen.id3.PictureType, picture_type.upper())
for picture_type in picture_types
]
try:
pictures = self.get("pictures")
except (UnsupportedTag, TagNotFound):
......@@ -418,6 +424,9 @@ class Metadata(object):
cleaner = self._conf.get("clean_pictures", lambda v: v)
pictures = cleaner(pictures)
for p in pictures:
if p["type"] == ptype:
return p
if not pictures:
return
for ptype in ptypes:
for p in pictures:
if p["type"] == ptype:
return p
......@@ -191,7 +191,7 @@ def process_upload(upload):
final_metadata = collections.ChainMap(
additional_data, import_metadata, file_metadata
)
additional_data["cover_data"] = m.get_picture("cover_front")
additional_data["cover_data"] = m.get_picture("cover_front", "other")
additional_data["upload_source"] = upload.source
track = get_track_from_import_metadata(final_metadata)
except UploadImportError as e:
......
......@@ -147,14 +147,16 @@ def test_can_get_metadata_from_id3_mp3_file(field, value):
assert data.get(field) == value
@pytest.mark.parametrize("name", ["test.mp3", "sample.flac", "with_cover.ogg"])
@pytest.mark.parametrize(
"name", ["test.mp3", "with_other_picture.mp3", "sample.flac", "with_cover.ogg"]
)
def test_can_get_pictures(name):
path = os.path.join(DATA_DIR, name)
data = metadata.Metadata(path)
pictures = data.get("pictures")
assert len(pictures) == 1
cover_data = data.get_picture("cover_front")
cover_data = data.get_picture("cover_front", "other")
assert cover_data["mimetype"].startswith("image/")
assert len(cover_data["content"]) > 0
assert type(cover_data["content"]) == bytes
......
File added
Importer will now pick embedded images in files with OTHER type if no COVER_FRONT is present
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment