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 ...@@ -13,6 +13,8 @@ from rest_framework.compat import Mapping
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
NODEFAULT = object() NODEFAULT = object()
# default title used when imported tracks miss the `Album` tag, see #122
UNKWOWN_ALBUM = "[Unknown Album]"
class TagNotFound(KeyError): class TagNotFound(KeyError):
...@@ -425,9 +427,11 @@ class AlbumField(serializers.Field): ...@@ -425,9 +427,11 @@ class AlbumField(serializers.Field):
def to_internal_value(self, data): def to_internal_value(self, data):
try: try:
title = data.get("album") title = data.get("album") or ""
except TagNotFound: except TagNotFound:
raise serializers.ValidationError("Missing album tag") title = ""
title = title.strip() or UNKWOWN_ALBUM
final = { final = {
"title": title, "title": title,
"release_date": data.get("date", None), "release_date": data.get("date", None),
......
...@@ -539,6 +539,34 @@ def test_serializer_album_artist_missing(): ...@@ -539,6 +539,34 @@ def test_serializer_album_artist_missing():
assert serializer.validated_data == expected 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( @pytest.mark.parametrize(
"field_name", ["copyright", "license", "mbid", "position", "disc_number"] "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