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

Merge branch '122-no-album' into 'master'

Resolve "Importing tracks without album fails"

See merge request funkwhale/funkwhale!803
parents c95c573a cdcba85f
No related branches found
No related tags found
No related merge requests found
......@@ -13,6 +13,8 @@ from rest_framework.compat import Mapping
logger = logging.getLogger(__name__)
NODEFAULT = object()
# default title used when imported tracks miss the `Album` tag, see #122
UNKWOWN_ALBUM = "[Unknown Album]"
class TagNotFound(KeyError):
......@@ -425,9 +427,11 @@ class AlbumField(serializers.Field):
def to_internal_value(self, data):
try:
title = data.get("album")
title = data.get("album") or ""
except TagNotFound:
raise serializers.ValidationError("Missing album tag")
title = ""
title = title.strip() or UNKWOWN_ALBUM
final = {
"title": title,
"release_date": data.get("date", None),
......
......@@ -539,6 +539,34 @@ def test_serializer_album_artist_missing():
assert serializer.validated_data == expected
@pytest.mark.parametrize(
"data",
[
# no album tag
{"title": "Track", "artist": "Artist"},
# empty/null values
{"title": "Track", "artist": "Artist", "album": ""},
{"title": "Track", "artist": "Artist", "album": " "},
{"title": "Track", "artist": "Artist", "album": None},
],
)
def test_serializer_album_default_title_when_missing_or_empty(data):
expected = {
"title": "Track",
"artists": [{"name": "Artist", "mbid": None}],
"album": {
"title": metadata.UNKWOWN_ALBUM,
"mbid": None,
"release_date": None,
"artists": [],
},
"cover_data": None,
}
serializer = metadata.TrackMetadataSerializer(data=metadata.FakeMetadata(data))
assert serializer.is_valid(raise_exception=True) is True
assert serializer.validated_data == expected
@pytest.mark.parametrize(
"field_name", ["copyright", "license", "mbid", "position", "disc_number"]
)
......
Support for importing files with no album tag (#122)
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