Use builtin typehints wherever possible
This commit is contained in:
parent
77cb291273
commit
2f36091cd9
|
@ -258,8 +258,7 @@ class ChannelSerializer(serializers.ModelSerializer):
|
||||||
"downloads_count",
|
"downloads_count",
|
||||||
]
|
]
|
||||||
|
|
||||||
@extend_schema_field(OpenApiTypes.OBJECT)
|
def get_artist(self, obj) -> object:
|
||||||
def get_artist(self, obj):
|
|
||||||
return music_serializers.serialize_artist_simple(obj.artist)
|
return music_serializers.serialize_artist_simple(obj.artist)
|
||||||
|
|
||||||
def to_representation(self, obj):
|
def to_representation(self, obj):
|
||||||
|
@ -268,12 +267,10 @@ class ChannelSerializer(serializers.ModelSerializer):
|
||||||
data["subscriptions_count"] = self.get_subscriptions_count(obj)
|
data["subscriptions_count"] = self.get_subscriptions_count(obj)
|
||||||
return data
|
return data
|
||||||
|
|
||||||
@extend_schema_field(OpenApiTypes.INT)
|
def get_subscriptions_count(self, obj) -> int:
|
||||||
def get_subscriptions_count(self, obj):
|
|
||||||
return obj.actor.received_follows.exclude(approved=False).count()
|
return obj.actor.received_follows.exclude(approved=False).count()
|
||||||
|
|
||||||
@extend_schema_field(OpenApiTypes.INT)
|
def get_downloads_count(self, obj) -> int:
|
||||||
def get_downloads_count(self, obj):
|
|
||||||
return getattr(obj, "_downloads_count", None) or 0
|
return getattr(obj, "_downloads_count", None) or 0
|
||||||
|
|
||||||
@extend_schema_field(federation_serializers.APIActorSerializer)
|
@extend_schema_field(federation_serializers.APIActorSerializer)
|
||||||
|
|
|
@ -10,9 +10,6 @@ from django.core.files.uploadedfile import SimpleUploadedFile
|
||||||
from django.utils.encoding import smart_text
|
from django.utils.encoding import smart_text
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
from drf_spectacular.utils import extend_schema_field
|
|
||||||
from drf_spectacular.types import OpenApiTypes
|
|
||||||
|
|
||||||
from . import models
|
from . import models
|
||||||
from . import utils
|
from . import utils
|
||||||
|
|
||||||
|
@ -273,8 +270,7 @@ class APIMutationSerializer(serializers.ModelSerializer):
|
||||||
"previous_state",
|
"previous_state",
|
||||||
]
|
]
|
||||||
|
|
||||||
@extend_schema_field(OpenApiTypes.OBJECT)
|
def get_target(self, obj) -> object:
|
||||||
def get_target(self, obj):
|
|
||||||
target = obj.target
|
target = obj.target
|
||||||
if not target:
|
if not target:
|
||||||
return
|
return
|
||||||
|
@ -296,8 +292,7 @@ class AttachmentSerializer(serializers.Serializer):
|
||||||
file = StripExifImageField(write_only=True)
|
file = StripExifImageField(write_only=True)
|
||||||
urls = serializers.SerializerMethodField()
|
urls = serializers.SerializerMethodField()
|
||||||
|
|
||||||
@extend_schema_field(OpenApiTypes.OBJECT)
|
def get_urls(self, o) -> object:
|
||||||
def get_urls(self, o):
|
|
||||||
urls = {}
|
urls = {}
|
||||||
urls["source"] = o.url
|
urls["source"] = o.url
|
||||||
urls["original"] = o.download_url_original
|
urls["original"] = o.download_url_original
|
||||||
|
@ -320,8 +315,7 @@ class ContentSerializer(serializers.Serializer):
|
||||||
)
|
)
|
||||||
html = serializers.SerializerMethodField()
|
html = serializers.SerializerMethodField()
|
||||||
|
|
||||||
@extend_schema_field(OpenApiTypes.STR)
|
def get_html(self, o) -> str:
|
||||||
def get_html(self, o):
|
|
||||||
return utils.render_html(o.text, o.content_type)
|
return utils.render_html(o.text, o.content_type)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -11,9 +11,6 @@ from django.db.models import CharField, Q, Value
|
||||||
from funkwhale_api.common import session
|
from funkwhale_api.common import session
|
||||||
from funkwhale_api.moderation import mrf
|
from funkwhale_api.moderation import mrf
|
||||||
|
|
||||||
from drf_spectacular.utils import extend_schema_field
|
|
||||||
from drf_spectacular.types import OpenApiTypes
|
|
||||||
|
|
||||||
from . import exceptions
|
from . import exceptions
|
||||||
from . import signing
|
from . import signing
|
||||||
|
|
||||||
|
@ -142,8 +139,7 @@ def local_qs(queryset, url_field="fid", include=True):
|
||||||
return queryset.filter(query)
|
return queryset.filter(query)
|
||||||
|
|
||||||
|
|
||||||
@extend_schema_field(OpenApiTypes.BOOL)
|
def is_local(url) -> bool:
|
||||||
def is_local(url):
|
|
||||||
if not url:
|
if not url:
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
|
@ -93,8 +93,7 @@ class ManageUserSerializer(serializers.ModelSerializer):
|
||||||
)
|
)
|
||||||
return instance
|
return instance
|
||||||
|
|
||||||
@extend_schema_field(OpenApiTypes.OBJECT)
|
def get_actor(self, obj) -> object:
|
||||||
def get_actor(self, obj):
|
|
||||||
if obj.actor:
|
if obj.actor:
|
||||||
return ManageBaseActorSerializer(obj.actor).data
|
return ManageBaseActorSerializer(obj.actor).data
|
||||||
|
|
||||||
|
@ -155,12 +154,10 @@ class ManageDomainSerializer(serializers.ModelSerializer):
|
||||||
"nodeinfo_fetch_date",
|
"nodeinfo_fetch_date",
|
||||||
]
|
]
|
||||||
|
|
||||||
@extend_schema_field(OpenApiTypes.INT)
|
def get_actors_count(self, o) -> int:
|
||||||
def get_actors_count(self, o):
|
|
||||||
return getattr(o, "actors_count", 0)
|
return getattr(o, "actors_count", 0)
|
||||||
|
|
||||||
@extend_schema_field(OpenApiTypes.INT)
|
def get_outbox_activities_count(self, o) -> int:
|
||||||
def get_outbox_activities_count(self, o):
|
|
||||||
return getattr(o, "outbox_activities_count", 0)
|
return getattr(o, "outbox_activities_count", 0)
|
||||||
|
|
||||||
|
|
||||||
|
@ -217,8 +214,7 @@ class ManageBaseActorSerializer(serializers.ModelSerializer):
|
||||||
]
|
]
|
||||||
read_only_fields = ["creation_date", "instance_policy"]
|
read_only_fields = ["creation_date", "instance_policy"]
|
||||||
|
|
||||||
@extend_schema_field(OpenApiTypes.BOOL)
|
def get_is_local(self, o) -> bool:
|
||||||
def get_is_local(self, o):
|
|
||||||
return o.domain_id == settings.FEDERATION_HOSTNAME
|
return o.domain_id == settings.FEDERATION_HOSTNAME
|
||||||
|
|
||||||
|
|
||||||
|
@ -235,8 +231,7 @@ class ManageActorSerializer(ManageBaseActorSerializer):
|
||||||
]
|
]
|
||||||
read_only_fields = ["creation_date", "instance_policy"]
|
read_only_fields = ["creation_date", "instance_policy"]
|
||||||
|
|
||||||
@extend_schema_field(OpenApiTypes.INT)
|
def get_uploads_count(self, o) -> int:
|
||||||
def get_uploads_count(self, o):
|
|
||||||
return getattr(o, "uploads_count", 0)
|
return getattr(o, "uploads_count", 0)
|
||||||
|
|
||||||
|
|
||||||
|
@ -460,8 +455,7 @@ class ManageAlbumSerializer(
|
||||||
"tracks_count",
|
"tracks_count",
|
||||||
]
|
]
|
||||||
|
|
||||||
@extend_schema_field(OpenApiTypes.INT)
|
def get_tracks_count(self, o) -> int:
|
||||||
def get_tracks_count(self, o):
|
|
||||||
return len(o.tracks.all())
|
return len(o.tracks.all())
|
||||||
|
|
||||||
@extend_schema_field({"type": "array", "items": {"type": "string"}})
|
@extend_schema_field({"type": "array", "items": {"type": "string"}})
|
||||||
|
@ -588,9 +582,8 @@ class ManageLibrarySerializer(serializers.ModelSerializer):
|
||||||
"creation_date",
|
"creation_date",
|
||||||
]
|
]
|
||||||
|
|
||||||
@extend_schema_field(OpenApiTypes.INT)
|
def get_uploads_count(self, obj) -> int:
|
||||||
def get_uploads_count(self, obj):
|
return getattr(obj, "_uploads_count", int(obj.uploads_count))
|
||||||
return getattr(obj, "_uploads_count", obj.uploads_count)
|
|
||||||
|
|
||||||
@extend_schema_field(OpenApiTypes.INT)
|
@extend_schema_field(OpenApiTypes.INT)
|
||||||
def get_followers_count(self, obj):
|
def get_followers_count(self, obj):
|
||||||
|
|
|
@ -42,8 +42,7 @@ class CoverField(common_serializers.AttachmentSerializer):
|
||||||
cover_field = CoverField()
|
cover_field = CoverField()
|
||||||
|
|
||||||
|
|
||||||
@extend_schema_field(OpenApiTypes.OBJECT)
|
def serialize_attributed_to(self, obj) -> object:
|
||||||
def serialize_attributed_to(self, obj):
|
|
||||||
# Import at runtime to avoid a circular import issue
|
# Import at runtime to avoid a circular import issue
|
||||||
from funkwhale_api.federation import serializers as federation_serializers
|
from funkwhale_api.federation import serializers as federation_serializers
|
||||||
|
|
||||||
|
@ -78,8 +77,7 @@ class LicenseSerializer(serializers.Serializer):
|
||||||
attribution = serializers.BooleanField()
|
attribution = serializers.BooleanField()
|
||||||
copyleft = serializers.BooleanField()
|
copyleft = serializers.BooleanField()
|
||||||
|
|
||||||
@extend_schema_field(OpenApiTypes.STR)
|
def get_id(self, obj) -> str:
|
||||||
def get_id(self, obj):
|
|
||||||
return obj["identifiers"][0]
|
return obj["identifiers"][0]
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
|
@ -99,16 +97,13 @@ class ArtistAlbumSerializer(serializers.Serializer):
|
||||||
release_date = serializers.DateField()
|
release_date = serializers.DateField()
|
||||||
creation_date = serializers.DateTimeField()
|
creation_date = serializers.DateTimeField()
|
||||||
|
|
||||||
@extend_schema_field(OpenApiTypes.INT)
|
def get_artist(self, o) -> int:
|
||||||
def get_artist(self, o):
|
|
||||||
return o.artist_id
|
return o.artist_id
|
||||||
|
|
||||||
@extend_schema_field(OpenApiTypes.INT)
|
def get_tracks_count(self, o) -> int:
|
||||||
def get_tracks_count(self, o):
|
|
||||||
return len(o.tracks.all())
|
return len(o.tracks.all())
|
||||||
|
|
||||||
@extend_schema_field(OpenApiTypes.BOOL)
|
def get_is_playable(self, obj) -> bool:
|
||||||
def get_is_playable(self, obj):
|
|
||||||
try:
|
try:
|
||||||
return bool(obj.is_playable_by_actor)
|
return bool(obj.is_playable_by_actor)
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
|
@ -140,13 +135,11 @@ class ArtistWithAlbumsSerializer(OptionalDescriptionMixin, serializers.Serialize
|
||||||
|
|
||||||
get_attributed_to = serialize_attributed_to
|
get_attributed_to = serialize_attributed_to
|
||||||
|
|
||||||
@extend_schema_field(OpenApiTypes.INT)
|
def get_tracks_count(self, o) -> int:
|
||||||
def get_tracks_count(self, o):
|
|
||||||
tracks = getattr(o, "_prefetched_tracks", None)
|
tracks = getattr(o, "_prefetched_tracks", None)
|
||||||
return len(tracks) if tracks else None
|
return len(tracks) if tracks else 0
|
||||||
|
|
||||||
@extend_schema_field(OpenApiTypes.OBJECT)
|
def get_channel(self, o) -> object:
|
||||||
def get_channel(self, o):
|
|
||||||
channel = o.get_channel()
|
channel = o.get_channel()
|
||||||
if not channel:
|
if not channel:
|
||||||
return
|
return
|
||||||
|
@ -216,17 +209,14 @@ class AlbumSerializer(OptionalDescriptionMixin, serializers.Serializer):
|
||||||
|
|
||||||
get_attributed_to = serialize_attributed_to
|
get_attributed_to = serialize_attributed_to
|
||||||
|
|
||||||
@extend_schema_field(OpenApiTypes.OBJECT)
|
def get_artist(self, obj) -> object:
|
||||||
def get_artist(self, obj):
|
|
||||||
return serialize_artist_simple(obj.artist)
|
return serialize_artist_simple(obj.artist)
|
||||||
|
|
||||||
|
|
||||||
@extend_schema_field(OpenApiTypes.INT)
|
def get_tracks_count(self, o) -> int:
|
||||||
def get_tracks_count(self, o):
|
|
||||||
return len(o.tracks.all())
|
return len(o.tracks.all())
|
||||||
|
|
||||||
@extend_schema_field(OpenApiTypes.BOOL)
|
def get_is_playable(self, obj) -> bool:
|
||||||
def get_is_playable(self, obj):
|
|
||||||
try:
|
try:
|
||||||
return any(
|
return any(
|
||||||
[
|
[
|
||||||
|
@ -242,8 +232,7 @@ class AlbumSerializer(OptionalDescriptionMixin, serializers.Serializer):
|
||||||
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]
|
||||||
|
|
||||||
@extend_schema_field(OpenApiTypes.INT)
|
def get_duration(self, obj) -> int:
|
||||||
def get_duration(self, obj):
|
|
||||||
try:
|
try:
|
||||||
return obj.duration
|
return obj.duration
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
|
@ -256,8 +245,7 @@ class TrackAlbumSerializer(serializers.ModelSerializer):
|
||||||
cover = cover_field
|
cover = cover_field
|
||||||
tracks_count = serializers.SerializerMethodField()
|
tracks_count = serializers.SerializerMethodField()
|
||||||
|
|
||||||
@extend_schema_field(OpenApiTypes.INT)
|
def get_tracks_count(self, o) -> int:
|
||||||
def get_tracks_count(self, o):
|
|
||||||
return getattr(o, "_prefetched_tracks_count", len(o.tracks.all()))
|
return getattr(o, "_prefetched_tracks_count", len(o.tracks.all()))
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
|
@ -276,8 +264,7 @@ class TrackAlbumSerializer(serializers.ModelSerializer):
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@extend_schema_field(OpenApiTypes.OBJECT)
|
def serialize_upload(upload) -> object:
|
||||||
def serialize_upload(upload):
|
|
||||||
return {
|
return {
|
||||||
"uuid": str(upload.uuid),
|
"uuid": str(upload.uuid),
|
||||||
"listen_url": upload.listen_url,
|
"listen_url": upload.listen_url,
|
||||||
|
@ -347,12 +334,10 @@ class TrackSerializer(OptionalDescriptionMixin, serializers.Serializer):
|
||||||
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]
|
||||||
|
|
||||||
@extend_schema_field(OpenApiTypes.STR)
|
def get_license(self, o) -> str:
|
||||||
def get_license(self, o):
|
|
||||||
return o.license_id
|
return o.license_id
|
||||||
|
|
||||||
@extend_schema_field(OpenApiTypes.BOOL)
|
def get_is_playable(self, obj) -> bool:
|
||||||
def get_is_playable(self, obj):
|
|
||||||
return bool(getattr(obj, "playable_uploads", []))
|
return bool(getattr(obj, "playable_uploads", []))
|
||||||
|
|
||||||
|
|
||||||
|
@ -377,12 +362,10 @@ class LibraryForOwnerSerializer(serializers.ModelSerializer):
|
||||||
]
|
]
|
||||||
read_only_fields = ["fid", "uuid", "creation_date", "actor"]
|
read_only_fields = ["fid", "uuid", "creation_date", "actor"]
|
||||||
|
|
||||||
@extend_schema_field(OpenApiTypes.INT)
|
def get_uploads_count(self, o) -> int:
|
||||||
def get_uploads_count(self, o):
|
return getattr(o, "_uploads_count", int(o.uploads_count))
|
||||||
return getattr(o, "_uploads_count", o.uploads_count)
|
|
||||||
|
|
||||||
@extend_schema_field(OpenApiTypes.INT)
|
def get_size(self, o) -> int:
|
||||||
def get_size(self, o):
|
|
||||||
return getattr(o, "_size", 0)
|
return getattr(o, "_size", 0)
|
||||||
|
|
||||||
def on_updated_fields(self, obj, before, after):
|
def on_updated_fields(self, obj, before, after):
|
||||||
|
@ -390,8 +373,7 @@ class LibraryForOwnerSerializer(serializers.ModelSerializer):
|
||||||
{"type": "Update", "object": {"type": "Library"}}, context={"library": obj}
|
{"type": "Update", "object": {"type": "Library"}}, context={"library": obj}
|
||||||
)
|
)
|
||||||
|
|
||||||
@extend_schema_field(OpenApiTypes.OBJECT)
|
def get_actor(self, o) -> object:
|
||||||
def get_actor(self, o):
|
|
||||||
# Import at runtime to avoid a circular import issue
|
# Import at runtime to avoid a circular import issue
|
||||||
from funkwhale_api.federation import serializers as federation_serializers
|
from funkwhale_api.federation import serializers as federation_serializers
|
||||||
|
|
||||||
|
|
|
@ -62,16 +62,14 @@ class PlaylistSerializer(serializers.ModelSerializer):
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
@extend_schema_field(OpenApiTypes.INT)
|
def get_tracks_count(self, obj) -> int:
|
||||||
def get_tracks_count(self, obj):
|
|
||||||
try:
|
try:
|
||||||
return obj.tracks_count
|
return obj.tracks_count
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
# no annotation?
|
# no annotation?
|
||||||
return obj.playlist_tracks.count()
|
return obj.playlist_tracks.count()
|
||||||
|
|
||||||
@extend_schema_field(OpenApiTypes.INT)
|
def get_duration(self, obj) -> int:
|
||||||
def get_duration(self, obj):
|
|
||||||
try:
|
try:
|
||||||
return obj.duration
|
return obj.duration
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
|
|
Loading…
Reference in New Issue