From 8193782f682a9f99fec634b6dc8603133cc00ab2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Toke=20H=C3=B8iland-J=C3=B8rgensen?= Date: Thu, 30 Aug 2018 14:03:56 +0200 Subject: [PATCH] subsonic: Don't crash when serialising artist with no name MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit If the name of an artist is not set, the serialiser will crash. Instead, just skip such an artist when serialising a list of artists. Also add test for serialising an artist with an empty name. Signed-off-by: Toke Høiland-Jørgensen --- api/funkwhale_api/subsonic/serializers.py | 3 ++- api/tests/subsonic/test_serializers.py | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/api/funkwhale_api/subsonic/serializers.py b/api/funkwhale_api/subsonic/serializers.py index fc21a99f2..a340a1aad 100644 --- a/api/funkwhale_api/subsonic/serializers.py +++ b/api/funkwhale_api/subsonic/serializers.py @@ -24,7 +24,8 @@ class GetArtistsSerializer(serializers.Serializer): first_letter_mapping = collections.defaultdict(list) for artist in values: - first_letter_mapping[artist["name"][0].upper()].append(artist) + if artist["name"]: + first_letter_mapping[artist["name"][0].upper()].append(artist) for letter, artists in sorted(first_letter_mapping.items()): letter_data = { diff --git a/api/tests/subsonic/test_serializers.py b/api/tests/subsonic/test_serializers.py index 6fdf02e2d..bd07008df 100644 --- a/api/tests/subsonic/test_serializers.py +++ b/api/tests/subsonic/test_serializers.py @@ -6,6 +6,7 @@ def test_get_artists_serializer(factories): artist1 = factories["music.Artist"](name="eliot") artist2 = factories["music.Artist"](name="Ellena") artist3 = factories["music.Artist"](name="Rilay") + artist4 = factories["music.Artist"](name="") # Shouldn't be serialised factories["music.Album"].create_batch(size=3, artist=artist1) factories["music.Album"].create_batch(size=2, artist=artist2) @@ -28,7 +29,7 @@ def test_get_artists_serializer(factories): } queryset = artist1.__class__.objects.filter( - pk__in=[artist1.pk, artist2.pk, artist3.pk] + pk__in=[artist1.pk, artist2.pk, artist3.pk, artist4.pk] ) assert serializers.GetArtistsSerializer(queryset).data == expected