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>
This commit is contained in:
		
							parent
							
								
									a5ee48818e
								
							
						
					
					
						commit
						136f24a917
					
				|  | @ -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 models as music_models | ||||||
| from funkwhale_api.music import utils as music_utils | from funkwhale_api.music import utils as music_utils | ||||||
| 
 | 
 | ||||||
|  | from .renderers import TagValue | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| def to_subsonic_date(date): | def to_subsonic_date(date): | ||||||
|     """ |     """ | ||||||
|  | @ -103,6 +105,23 @@ class GetArtistSerializer(serializers.Serializer): | ||||||
|         return payload |         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): | def get_track_data(album, track, upload): | ||||||
|     data = { |     data = { | ||||||
|         "id": track.pk, |         "id": track.pk, | ||||||
|  |  | ||||||
|  | @ -269,19 +269,8 @@ class SubsonicViewSet(viewsets.GenericViewSet): | ||||||
|     @find_object(music_models.Artist.objects.all(), filter_playable=True) |     @find_object(music_models.Artist.objects.all(), filter_playable=True) | ||||||
|     def get_artist_info2(self, request, *args, **kwargs): |     def get_artist_info2(self, request, *args, **kwargs): | ||||||
|         artist = kwargs.pop("obj") |         artist = kwargs.pop("obj") | ||||||
|         artist_info = {} |         data = serializers.GetArtistInfo2Serializer(artist).data | ||||||
|         if artist.mbid: |         payload = {"artistInfo2": data} | ||||||
|             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} |  | ||||||
| 
 | 
 | ||||||
|         return response.Response(payload, status=200) |         return response.Response(payload, status=200) | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -4,7 +4,7 @@ import pytest | ||||||
| from django.db.models.aggregates import Count | from django.db.models.aggregates import Count | ||||||
| 
 | 
 | ||||||
| from funkwhale_api.music import models as music_models | 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( | @pytest.mark.parametrize( | ||||||
|  | @ -150,6 +150,24 @@ def test_get_artist_serializer(factories): | ||||||
|     assert serializers.GetArtistSerializer(artist).data == expected |     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( | @pytest.mark.parametrize( | ||||||
|     "mimetype, extension, expected", |     "mimetype, extension, expected", | ||||||
|     [ |     [ | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Philipp Wolfer
						Philipp Wolfer