Merge branch '122-no-album' into 'master'
Resolve "Importing tracks without album fails" See merge request funkwhale/funkwhale!803
This commit is contained in:
commit
a763cc42b1
|
@ -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):
|
||||||
|
|
||||||
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():
|
||||||
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"]
|
||||||
)
|
)
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Support for importing files with no album tag (#122)
|
Loading…
Reference in New Issue