Resolve "Importing tracks without album fails"

plugins
Eliot Berriot 2019-06-26 10:38:29 +02:00
rodzic c95c573a35
commit cdcba85f29
3 zmienionych plików z 35 dodań i 2 usunięć

Wyświetl plik

@ -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),

Wyświetl plik

@ -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"]
)

Wyświetl plik

@ -0,0 +1 @@
Support for importing files with no album tag (#122)