Use builtin typehints wherever possible

This commit is contained in:
Georg Krause 2022-07-18 10:54:23 +02:00
parent 77cb291273
commit 2f36091cd9
No known key found for this signature in database
GPG Key ID: 2970D504B2183D22
6 changed files with 37 additions and 77 deletions

View File

@ -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)

View File

@ -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)

View File

@ -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

View File

@ -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):

View File

@ -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

View File

@ -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: