Move Subsonic getArtistInfo2 serialization to serializer

Also fixed JSON serialization by not using lists for the single value fields.

Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2695>
environments/review-docs-renov-r6aeyi/deployments/19166
Philipp Wolfer 2024-01-11 09:27:38 +01:00 zatwierdzone przez Marge
rodzic a5ee48818e
commit 136f24a917
3 zmienionych plików z 40 dodań i 14 usunięć

Wyświetl plik

@ -7,6 +7,8 @@ from funkwhale_api.history import models as history_models
from funkwhale_api.music import models as music_models
from funkwhale_api.music import utils as music_utils
from .renderers import TagValue
def to_subsonic_date(date):
"""
@ -103,6 +105,23 @@ class GetArtistSerializer(serializers.Serializer):
return payload
class GetArtistInfo2Serializer(serializers.Serializer):
def to_representation(self, artist):
payload = {}
if artist.mbid:
payload["musicBrainzId"] = TagValue(artist.mbid)
if artist.attachment_cover:
payload["mediumImageUrl"] = TagValue(
artist.attachment_cover.download_url_medium_square_crop
)
payload["largeImageUrl"] = TagValue(
artist.attachment_cover.download_url_large_square_crop
)
if artist.description:
payload["biography"] = TagValue(artist.description.rendered)
return payload
def get_track_data(album, track, upload):
data = {
"id": track.pk,

Wyświetl plik

@ -269,19 +269,8 @@ class SubsonicViewSet(viewsets.GenericViewSet):
@find_object(music_models.Artist.objects.all(), filter_playable=True)
def get_artist_info2(self, request, *args, **kwargs):
artist = kwargs.pop("obj")
artist_info = {}
if artist.mbid:
artist_info["musicBrainzId"] = [str(artist.mbid)]
if artist.attachment_cover:
artist_info["mediumImageUrl"] = [
artist.attachment_cover.download_url_medium_square_crop
]
artist_info["largeImageUrl"] = [
artist.attachment_cover.download_url_large_square_crop
]
if artist.description:
artist_info["biography"] = [artist.description.rendered]
payload = {"artistInfo2": artist_info}
data = serializers.GetArtistInfo2Serializer(artist).data
payload = {"artistInfo2": data}
return response.Response(payload, status=200)

Wyświetl plik

@ -4,7 +4,7 @@ import pytest
from django.db.models.aggregates import Count
from funkwhale_api.music import models as music_models
from funkwhale_api.subsonic import serializers
from funkwhale_api.subsonic import renderers, serializers
@pytest.mark.parametrize(
@ -150,6 +150,24 @@ def test_get_artist_serializer(factories):
assert serializers.GetArtistSerializer(artist).data == expected
def test_get_artist_info_2_serializer(factories):
content = factories["common.Content"]()
artist = factories["music.Artist"](with_cover=True, description=content)
expected = {
"musicBrainzId": artist.mbid,
"mediumImageUrl": renderers.TagValue(
artist.attachment_cover.download_url_medium_square_crop
),
"largeImageUrl": renderers.TagValue(
artist.attachment_cover.download_url_large_square_crop
),
"biography": renderers.TagValue(artist.description.rendered),
}
assert serializers.GetArtistInfo2Serializer(artist).data == expected
@pytest.mark.parametrize(
"mimetype, extension, expected",
[