Move to APIActorSerializer
This commit is contained in:
parent
2f36091cd9
commit
65e4823a09
|
@ -11,6 +11,7 @@ from funkwhale_api.common import serializers as common_serializers
|
||||||
from funkwhale_api.common import utils as common_utils
|
from funkwhale_api.common import utils as common_utils
|
||||||
from funkwhale_api.federation import routes
|
from funkwhale_api.federation import routes
|
||||||
from funkwhale_api.federation import utils as federation_utils
|
from funkwhale_api.federation import utils as federation_utils
|
||||||
|
from funkwhale_api.federation.serializers import APIActorSerializer
|
||||||
from funkwhale_api.playlists import models as playlists_models
|
from funkwhale_api.playlists import models as playlists_models
|
||||||
from funkwhale_api.tags import models as tag_models
|
from funkwhale_api.tags import models as tag_models
|
||||||
from funkwhale_api.tags import serializers as tags_serializers
|
from funkwhale_api.tags import serializers as tags_serializers
|
||||||
|
@ -42,15 +43,6 @@ class CoverField(common_serializers.AttachmentSerializer):
|
||||||
cover_field = CoverField()
|
cover_field = CoverField()
|
||||||
|
|
||||||
|
|
||||||
def serialize_attributed_to(self, obj) -> object:
|
|
||||||
# Import at runtime to avoid a circular import issue
|
|
||||||
from funkwhale_api.federation import serializers as federation_serializers
|
|
||||||
|
|
||||||
if not obj.attributed_to_id:
|
|
||||||
return
|
|
||||||
|
|
||||||
return federation_serializers.APIActorSerializer(obj.attributed_to).data
|
|
||||||
|
|
||||||
|
|
||||||
class OptionalDescriptionMixin(object):
|
class OptionalDescriptionMixin(object):
|
||||||
def to_representation(self, obj):
|
def to_representation(self, obj):
|
||||||
|
@ -116,7 +108,7 @@ DATETIME_FIELD = serializers.DateTimeField()
|
||||||
class ArtistWithAlbumsSerializer(OptionalDescriptionMixin, serializers.Serializer):
|
class ArtistWithAlbumsSerializer(OptionalDescriptionMixin, serializers.Serializer):
|
||||||
albums = ArtistAlbumSerializer(many=True)
|
albums = ArtistAlbumSerializer(many=True)
|
||||||
tags = serializers.SerializerMethodField()
|
tags = serializers.SerializerMethodField()
|
||||||
attributed_to = serializers.SerializerMethodField()
|
attributed_to = APIActorSerializer()
|
||||||
channel = serializers.SerializerMethodField()
|
channel = serializers.SerializerMethodField()
|
||||||
tracks_count = serializers.SerializerMethodField()
|
tracks_count = serializers.SerializerMethodField()
|
||||||
id = serializers.IntegerField()
|
id = serializers.IntegerField()
|
||||||
|
@ -133,13 +125,12 @@ class ArtistWithAlbumsSerializer(OptionalDescriptionMixin, serializers.Serialize
|
||||||
tagged_items = getattr(obj, "_prefetched_tagged_items", [])
|
tagged_items = getattr(obj, "_prefetched_tagged_items", [])
|
||||||
return [ti.tag.name for ti in tagged_items]
|
return [ti.tag.name for ti in tagged_items]
|
||||||
|
|
||||||
get_attributed_to = serialize_attributed_to
|
|
||||||
|
|
||||||
def get_tracks_count(self, o) -> int:
|
def get_tracks_count(self, o) -> int:
|
||||||
tracks = getattr(o, "_prefetched_tracks", None)
|
tracks = getattr(o, "_prefetched_tracks", None)
|
||||||
return len(tracks) if tracks else 0
|
return len(tracks) if tracks else 0
|
||||||
|
|
||||||
def get_channel(self, o) -> object:
|
@extend_schema_field(OpenApiTypes.OBJECT)
|
||||||
|
def get_channel(self, o):
|
||||||
channel = o.get_channel()
|
channel = o.get_channel()
|
||||||
if not channel:
|
if not channel:
|
||||||
return
|
return
|
||||||
|
@ -196,7 +187,7 @@ class AlbumSerializer(OptionalDescriptionMixin, serializers.Serializer):
|
||||||
is_playable = serializers.SerializerMethodField()
|
is_playable = serializers.SerializerMethodField()
|
||||||
tags = serializers.SerializerMethodField()
|
tags = serializers.SerializerMethodField()
|
||||||
tracks_count = serializers.SerializerMethodField()
|
tracks_count = serializers.SerializerMethodField()
|
||||||
attributed_to = serializers.SerializerMethodField()
|
attributed_to = APIActorSerializer()
|
||||||
id = serializers.IntegerField()
|
id = serializers.IntegerField()
|
||||||
fid = serializers.URLField()
|
fid = serializers.URLField()
|
||||||
mbid = serializers.UUIDField()
|
mbid = serializers.UUIDField()
|
||||||
|
@ -207,12 +198,10 @@ class AlbumSerializer(OptionalDescriptionMixin, serializers.Serializer):
|
||||||
is_local = serializers.BooleanField()
|
is_local = serializers.BooleanField()
|
||||||
duration = serializers.SerializerMethodField(read_only=True)
|
duration = serializers.SerializerMethodField(read_only=True)
|
||||||
|
|
||||||
get_attributed_to = serialize_attributed_to
|
@extend_schema_field(OpenApiTypes.OBJECT)
|
||||||
|
def get_artist(self, obj):
|
||||||
def get_artist(self, obj) -> object:
|
|
||||||
return serialize_artist_simple(obj.artist)
|
return serialize_artist_simple(obj.artist)
|
||||||
|
|
||||||
|
|
||||||
def get_tracks_count(self, o) -> int:
|
def get_tracks_count(self, o) -> int:
|
||||||
return len(o.tracks.all())
|
return len(o.tracks.all())
|
||||||
|
|
||||||
|
@ -263,6 +252,9 @@ class TrackAlbumSerializer(serializers.ModelSerializer):
|
||||||
"tracks_count",
|
"tracks_count",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@extend_schema_field(OpenApiTypes.OBJECT)
|
||||||
|
def get_artist(self, o):
|
||||||
|
return serialize_artist_simple(o.artist)
|
||||||
|
|
||||||
def serialize_upload(upload) -> object:
|
def serialize_upload(upload) -> object:
|
||||||
return {
|
return {
|
||||||
|
@ -299,7 +291,7 @@ class TrackSerializer(OptionalDescriptionMixin, serializers.Serializer):
|
||||||
uploads = serializers.SerializerMethodField()
|
uploads = serializers.SerializerMethodField()
|
||||||
listen_url = serializers.SerializerMethodField()
|
listen_url = serializers.SerializerMethodField()
|
||||||
tags = serializers.SerializerMethodField()
|
tags = serializers.SerializerMethodField()
|
||||||
attributed_to = serializers.SerializerMethodField()
|
attributed_to = APIActorSerializer()
|
||||||
|
|
||||||
id = serializers.IntegerField()
|
id = serializers.IntegerField()
|
||||||
fid = serializers.URLField()
|
fid = serializers.URLField()
|
||||||
|
@ -314,9 +306,12 @@ class TrackSerializer(OptionalDescriptionMixin, serializers.Serializer):
|
||||||
copyright = serializers.CharField()
|
copyright = serializers.CharField()
|
||||||
license = serializers.SerializerMethodField()
|
license = serializers.SerializerMethodField()
|
||||||
cover = cover_field
|
cover = cover_field
|
||||||
get_attributed_to = serialize_attributed_to
|
|
||||||
is_playable = serializers.SerializerMethodField()
|
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)
|
@extend_schema_field(OpenApiTypes.URI)
|
||||||
def get_listen_url(self, obj):
|
def get_listen_url(self, obj):
|
||||||
return obj.listen_url
|
return obj.listen_url
|
||||||
|
@ -345,7 +340,7 @@ class TrackSerializer(OptionalDescriptionMixin, serializers.Serializer):
|
||||||
class LibraryForOwnerSerializer(serializers.ModelSerializer):
|
class LibraryForOwnerSerializer(serializers.ModelSerializer):
|
||||||
uploads_count = serializers.SerializerMethodField()
|
uploads_count = serializers.SerializerMethodField()
|
||||||
size = serializers.SerializerMethodField()
|
size = serializers.SerializerMethodField()
|
||||||
actor = serializers.SerializerMethodField()
|
actor = APIActorSerializer()
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = models.Library
|
model = models.Library
|
||||||
|
@ -373,12 +368,6 @@ class LibraryForOwnerSerializer(serializers.ModelSerializer):
|
||||||
{"type": "Update", "object": {"type": "Library"}}, context={"library": obj}
|
{"type": "Update", "object": {"type": "Library"}}, context={"library": obj}
|
||||||
)
|
)
|
||||||
|
|
||||||
def get_actor(self, o) -> object:
|
|
||||||
# Import at runtime to avoid a circular import issue
|
|
||||||
from funkwhale_api.federation import serializers as federation_serializers
|
|
||||||
|
|
||||||
return federation_serializers.APIActorSerializer(o.actor).data
|
|
||||||
|
|
||||||
|
|
||||||
class UploadSerializer(serializers.ModelSerializer):
|
class UploadSerializer(serializers.ModelSerializer):
|
||||||
track = TrackSerializer(required=False, allow_null=True)
|
track = TrackSerializer(required=False, allow_null=True)
|
||||||
|
|
Loading…
Reference in New Issue