diff --git a/api/funkwhale_api/music/metadata.py b/api/funkwhale_api/music/metadata.py index 55044dbc7..f0ea67b1a 100644 --- a/api/funkwhale_api/music/metadata.py +++ b/api/funkwhale_api/music/metadata.py @@ -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), diff --git a/api/tests/music/test_metadata.py b/api/tests/music/test_metadata.py index 52c4e3026..539fa49a2 100644 --- a/api/tests/music/test_metadata.py +++ b/api/tests/music/test_metadata.py @@ -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"] ) diff --git a/changes/changelog.d/122.enhancement b/changes/changelog.d/122.enhancement new file mode 100644 index 000000000..2776824c7 --- /dev/null +++ b/changes/changelog.d/122.enhancement @@ -0,0 +1 @@ +Support for importing files with no album tag (#122)