Add SimpleArtistSerializer
This commit is contained in:
parent
c7a759f617
commit
c642e7a94f
|
@ -28,7 +28,7 @@ from funkwhale_api.federation import serializers as federation_serializers
|
|||
from funkwhale_api.federation import utils as federation_utils
|
||||
from funkwhale_api.moderation import mrf
|
||||
from funkwhale_api.music import models as music_models
|
||||
from funkwhale_api.music import serializers as music_serializers
|
||||
from funkwhale_api.music.serializers import (SimpleArtistSerializer, COVER_WRITE_FIELD)
|
||||
from funkwhale_api.tags import models as tags_models
|
||||
from funkwhale_api.tags import serializers as tags_serializers
|
||||
from funkwhale_api.users import serializers as users_serializers
|
||||
|
@ -87,7 +87,7 @@ class ChannelCreateSerializer(serializers.Serializer):
|
|||
choices=music_models.ARTIST_CONTENT_CATEGORY_CHOICES
|
||||
)
|
||||
metadata = serializers.DictField(required=False)
|
||||
cover = music_serializers.COVER_WRITE_FIELD
|
||||
cover = COVER_WRITE_FIELD
|
||||
|
||||
def validate(self, validated_data):
|
||||
existing_channels = self.context["actor"].owned_channels.count()
|
||||
|
@ -166,7 +166,7 @@ class ChannelUpdateSerializer(serializers.Serializer):
|
|||
choices=music_models.ARTIST_CONTENT_CATEGORY_CHOICES
|
||||
)
|
||||
metadata = serializers.DictField(required=False)
|
||||
cover = music_serializers.COVER_WRITE_FIELD
|
||||
cover = COVER_WRITE_FIELD
|
||||
|
||||
def validate(self, validated_data):
|
||||
validated_data = super().validate(validated_data)
|
||||
|
@ -237,7 +237,7 @@ class ChannelUpdateSerializer(serializers.Serializer):
|
|||
|
||||
|
||||
class ChannelSerializer(serializers.ModelSerializer):
|
||||
artist = serializers.SerializerMethodField()
|
||||
artist = SimpleArtistSerializer()
|
||||
actor = serializers.SerializerMethodField()
|
||||
downloads_count = serializers.SerializerMethodField()
|
||||
attributed_to = federation_serializers.APIActorSerializer()
|
||||
|
@ -258,10 +258,6 @@ class ChannelSerializer(serializers.ModelSerializer):
|
|||
"downloads_count",
|
||||
]
|
||||
|
||||
@extend_schema_field(OpenApiTypes.OBJECT)
|
||||
def get_artist(self, obj):
|
||||
return music_serializers.serialize_artist_simple(obj.artist)
|
||||
|
||||
def to_representation(self, obj):
|
||||
data = super().to_representation(obj)
|
||||
if self.context.get("subscriptions_count"):
|
||||
|
|
|
@ -5,7 +5,6 @@ from funkwhale_api.federation import serializers as federation_serializers
|
|||
from funkwhale_api.music.serializers import (
|
||||
TrackActivitySerializer,
|
||||
TrackSerializer,
|
||||
serialize_artist_simple,
|
||||
)
|
||||
from funkwhale_api.users.serializers import UserActivitySerializer, UserBasicSerializer
|
||||
|
||||
|
@ -35,10 +34,7 @@ class UserTrackFavoriteSerializer(serializers.ModelSerializer):
|
|||
track = TrackSerializer(read_only=True)
|
||||
user = UserBasicSerializer(read_only=True)
|
||||
actor = serializers.SerializerMethodField()
|
||||
|
||||
def get_artist(self, obj) -> object:
|
||||
return serialize_artist_simple(obj.artist)
|
||||
|
||||
|
||||
class Meta:
|
||||
model = models.TrackFavorite
|
||||
fields = ("id", "user", "track", "creation_date", "actor")
|
||||
|
|
|
@ -33,9 +33,6 @@ COVER_WRITE_FIELD = common_serializers.RelatedField(
|
|||
write_only=True,
|
||||
)
|
||||
|
||||
from funkwhale_api.audio import serializers as audio_serializers # NOQA
|
||||
|
||||
|
||||
class CoverField(common_serializers.AttachmentSerializer):
|
||||
pass
|
||||
|
||||
|
@ -144,44 +141,29 @@ class ArtistWithAlbumsSerializer(OptionalDescriptionMixin, serializers.Serialize
|
|||
}
|
||||
|
||||
|
||||
def serialize_artist_simple(artist):
|
||||
data = {
|
||||
"id": artist.id,
|
||||
"fid": artist.fid,
|
||||
"mbid": str(artist.mbid),
|
||||
"name": artist.name,
|
||||
"creation_date": DATETIME_FIELD.to_representation(artist.creation_date),
|
||||
"modification_date": DATETIME_FIELD.to_representation(artist.modification_date),
|
||||
"is_local": artist.is_local,
|
||||
"content_category": artist.content_category,
|
||||
}
|
||||
if "description" in artist._state.fields_cache:
|
||||
data["description"] = (
|
||||
common_serializers.ContentSerializer(artist.description).data
|
||||
if artist.description
|
||||
else None
|
||||
class SimpleArtistSerializer(serializers.ModelSerializer):
|
||||
attachment_cover = cover_field
|
||||
description = common_serializers.ContentSerializer()
|
||||
|
||||
class Meta:
|
||||
model = models.Artist
|
||||
fields = (
|
||||
"id",
|
||||
"fid",
|
||||
"mbid",
|
||||
"name",
|
||||
"creation_date",
|
||||
"modification_date",
|
||||
"is_local",
|
||||
"content_category",
|
||||
"description",
|
||||
"attachment_cover",
|
||||
"channel",
|
||||
)
|
||||
|
||||
if "attachment_cover" in artist._state.fields_cache:
|
||||
data["cover"] = (
|
||||
cover_field.to_representation(artist.attachment_cover)
|
||||
if artist.attachment_cover
|
||||
else None
|
||||
)
|
||||
if "channel" in artist._state.fields_cache and artist.get_channel():
|
||||
data["channel"] = str(artist.channel.uuid)
|
||||
|
||||
if getattr(artist, "_tracks_count", None) is not None:
|
||||
data["tracks_count"] = artist._tracks_count
|
||||
|
||||
if getattr(artist, "_prefetched_tagged_items", None) is not None:
|
||||
data["tags"] = [ti.tag.name for ti in artist._prefetched_tagged_items]
|
||||
|
||||
return data
|
||||
|
||||
|
||||
class AlbumSerializer(OptionalDescriptionMixin, serializers.Serializer):
|
||||
artist = serializers.SerializerMethodField()
|
||||
artist = SimpleArtistSerializer()
|
||||
cover = cover_field
|
||||
is_playable = serializers.SerializerMethodField()
|
||||
tags = serializers.SerializerMethodField()
|
||||
|
@ -191,16 +173,11 @@ class AlbumSerializer(OptionalDescriptionMixin, serializers.Serializer):
|
|||
fid = serializers.URLField()
|
||||
mbid = serializers.UUIDField()
|
||||
title = serializers.CharField()
|
||||
artist = serializers.SerializerMethodField()
|
||||
release_date = serializers.DateField()
|
||||
creation_date = serializers.DateTimeField()
|
||||
is_local = serializers.BooleanField()
|
||||
duration = serializers.SerializerMethodField(read_only=True)
|
||||
|
||||
@extend_schema_field(OpenApiTypes.OBJECT)
|
||||
def get_artist(self, obj):
|
||||
return serialize_artist_simple(obj.artist)
|
||||
|
||||
def get_tracks_count(self, o) -> int:
|
||||
return len(o.tracks.all())
|
||||
|
||||
|
@ -229,7 +206,7 @@ class AlbumSerializer(OptionalDescriptionMixin, serializers.Serializer):
|
|||
|
||||
|
||||
class TrackAlbumSerializer(serializers.ModelSerializer):
|
||||
artist = serializers.SerializerMethodField()
|
||||
artist = SimpleArtistSerializer()
|
||||
cover = cover_field
|
||||
tracks_count = serializers.SerializerMethodField()
|
||||
|
||||
|
@ -251,10 +228,6 @@ class TrackAlbumSerializer(serializers.ModelSerializer):
|
|||
"tracks_count",
|
||||
)
|
||||
|
||||
@extend_schema_field(OpenApiTypes.OBJECT)
|
||||
def get_artist(self, o):
|
||||
return serialize_artist_simple(o.artist)
|
||||
|
||||
|
||||
def serialize_upload(upload) -> object:
|
||||
return {
|
||||
|
@ -286,7 +259,7 @@ def sort_uploads_for_listen(uploads):
|
|||
|
||||
|
||||
class TrackSerializer(OptionalDescriptionMixin, serializers.Serializer):
|
||||
artist = serializers.SerializerMethodField()
|
||||
artist = SimpleArtistSerializer()
|
||||
album = TrackAlbumSerializer(read_only=True)
|
||||
uploads = serializers.SerializerMethodField()
|
||||
listen_url = serializers.SerializerMethodField()
|
||||
|
@ -297,7 +270,6 @@ class TrackSerializer(OptionalDescriptionMixin, serializers.Serializer):
|
|||
fid = serializers.URLField()
|
||||
mbid = serializers.UUIDField()
|
||||
title = serializers.CharField()
|
||||
artist = serializers.SerializerMethodField()
|
||||
creation_date = serializers.DateTimeField()
|
||||
is_local = serializers.BooleanField()
|
||||
position = serializers.IntegerField()
|
||||
|
@ -308,10 +280,6 @@ class TrackSerializer(OptionalDescriptionMixin, serializers.Serializer):
|
|||
cover = cover_field
|
||||
is_playable = serializers.SerializerMethodField()
|
||||
|
||||
@extend_schema_field(OpenApiTypes.OBJECT)
|
||||
def get_artist(self, obj):
|
||||
return serialize_artist_simple(obj.artist)
|
||||
|
||||
@extend_schema_field(OpenApiTypes.URI)
|
||||
def get_listen_url(self, obj):
|
||||
return obj.listen_url
|
||||
|
@ -370,6 +338,7 @@ class LibraryForOwnerSerializer(serializers.ModelSerializer):
|
|||
|
||||
|
||||
class UploadSerializer(serializers.ModelSerializer):
|
||||
from funkwhale_api.audio.serializers import ChannelSerializer
|
||||
track = TrackSerializer(required=False, allow_null=True)
|
||||
library = common_serializers.RelatedField(
|
||||
"uuid",
|
||||
|
@ -379,7 +348,7 @@ class UploadSerializer(serializers.ModelSerializer):
|
|||
)
|
||||
channel = common_serializers.RelatedField(
|
||||
"uuid",
|
||||
audio_serializers.ChannelSerializer(),
|
||||
ChannelSerializer(),
|
||||
required=False,
|
||||
filters=lambda context: {"attributed_to": context["user"].actor},
|
||||
)
|
||||
|
|
|
@ -216,7 +216,7 @@ def test_channel_serializer_representation(factories, to_api_date):
|
|||
channel = factories["audio.Channel"](artist__description=content)
|
||||
setattr(channel, "_downloads_count", 12)
|
||||
expected = {
|
||||
"artist": music_serializers.serialize_artist_simple(channel.artist),
|
||||
"artist": music_serializers.SimpleArtistSerializer(),
|
||||
"uuid": str(channel.uuid),
|
||||
"creation_date": to_api_date(channel.creation_date),
|
||||
"actor": federation_serializers.APIActorSerializer(channel.actor).data,
|
||||
|
@ -240,7 +240,7 @@ def test_channel_serializer_external_representation(factories, to_api_date):
|
|||
channel = factories["audio.Channel"](artist__description=content, external=True)
|
||||
|
||||
expected = {
|
||||
"artist": music_serializers.serialize_artist_simple(channel.artist),
|
||||
"artist": music_serializers.SimpleArtistSerializer(),
|
||||
"uuid": str(channel.uuid),
|
||||
"creation_date": to_api_date(channel.creation_date),
|
||||
"actor": None,
|
||||
|
|
|
@ -179,7 +179,7 @@ def test_album_serializer(factories, to_api_date):
|
|||
"fid": album.fid,
|
||||
"mbid": str(album.mbid),
|
||||
"title": album.title,
|
||||
"artist": serializers.serialize_artist_simple(album.artist),
|
||||
"artist": serializers.SimpleArtistSerializer(),
|
||||
"creation_date": to_api_date(album.creation_date),
|
||||
"is_playable": False,
|
||||
"duration": 0,
|
||||
|
@ -209,7 +209,7 @@ def test_track_album_serializer(factories, to_api_date):
|
|||
"fid": album.fid,
|
||||
"mbid": str(album.mbid),
|
||||
"title": album.title,
|
||||
"artist": serializers.serialize_artist_simple(album.artist),
|
||||
"artist": serializers.SimpleArtistSerializer(),
|
||||
"creation_date": to_api_date(album.creation_date),
|
||||
"is_playable": False,
|
||||
"cover": common_serializers.AttachmentSerializer(album.attachment_cover).data,
|
||||
|
@ -241,7 +241,7 @@ def test_track_serializer(factories, to_api_date):
|
|||
expected = {
|
||||
"id": track.id,
|
||||
"fid": track.fid,
|
||||
"artist": serializers.serialize_artist_simple(track.artist),
|
||||
"artist": serializers.SimpleArtistSerializer(),
|
||||
"album": serializers.TrackAlbumSerializer(track.album).data,
|
||||
"mbid": str(track.mbid),
|
||||
"title": track.title,
|
||||
|
|
Loading…
Reference in New Issue