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