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

Resolve "Importing tracks without album fails"

parent c95c573a
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