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",
]
@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)

View File

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

View File

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

View File

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

View File

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

View File

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