Add @extend_schema decorators to fix drf-spectacular serializer warnings
All @api_view function-based views now have explicit schema annotations, eliminating "unable to guess serializer" warnings on startup and producing complete OpenAPI documentation. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
bb3491ae39
commit
324a91271e
3 changed files with 19 additions and 0 deletions
|
|
@ -1,3 +1,4 @@
|
|||
from drf_spectacular.utils import extend_schema
|
||||
from rest_framework import status
|
||||
from rest_framework.decorators import api_view, permission_classes
|
||||
from rest_framework.permissions import IsAuthenticated
|
||||
|
|
@ -18,6 +19,10 @@ from apps.accounts.serializers import (
|
|||
User = get_user_model()
|
||||
|
||||
|
||||
@extend_schema(
|
||||
request=UpdateProfileSerializer,
|
||||
responses={200: UserSerializer},
|
||||
)
|
||||
@api_view(["GET", "PATCH"])
|
||||
@permission_classes([IsAuthenticated])
|
||||
def me(request):
|
||||
|
|
@ -31,6 +36,10 @@ def me(request):
|
|||
return Response(UserSerializer(request.user).data)
|
||||
|
||||
|
||||
@extend_schema(
|
||||
request=ChangePasswordSerializer,
|
||||
responses={200: None},
|
||||
)
|
||||
@api_view(["POST"])
|
||||
@permission_classes([IsAuthenticated])
|
||||
def change_password(request):
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
from django.db.models import Count
|
||||
from django.shortcuts import get_object_or_404
|
||||
from drf_spectacular.utils import extend_schema
|
||||
from rest_framework import status
|
||||
from rest_framework.decorators import api_view, permission_classes
|
||||
from rest_framework.response import Response
|
||||
|
|
@ -18,6 +19,7 @@ from apps.resources.services import detect_format_from_filename, process_upload
|
|||
from parsers.factory import ParserFactory
|
||||
|
||||
|
||||
@extend_schema(request=FileUploadSerializer, responses={201: None})
|
||||
@api_view(["POST"])
|
||||
@permission_classes([IsManagerOrAbove])
|
||||
def upload_resource(request, slug):
|
||||
|
|
@ -56,6 +58,7 @@ def upload_resource(request, slug):
|
|||
return Response(result, status=status.HTTP_201_CREATED)
|
||||
|
||||
|
||||
@extend_schema(responses={200: ResourceFileSerializer(many=True)})
|
||||
@api_view(["GET"])
|
||||
def list_resources(request, slug):
|
||||
"""List resource files for a project."""
|
||||
|
|
@ -65,6 +68,7 @@ def list_resources(request, slug):
|
|||
return Response(serializer.data)
|
||||
|
||||
|
||||
@extend_schema(responses={200: TranslatableStringListSerializer(many=True)})
|
||||
@api_view(["GET"])
|
||||
def list_strings(request, slug):
|
||||
"""List translatable strings for a project with optional filters."""
|
||||
|
|
@ -104,6 +108,7 @@ def list_strings(request, slug):
|
|||
return Response(serializer.data)
|
||||
|
||||
|
||||
@extend_schema(responses={200: TranslatableStringSerializer})
|
||||
@api_view(["GET"])
|
||||
def string_detail(request, slug, string_id):
|
||||
"""Get a translatable string with all its translations."""
|
||||
|
|
@ -117,6 +122,7 @@ def string_detail(request, slug, string_id):
|
|||
return Response(serializer.data)
|
||||
|
||||
|
||||
@extend_schema(responses={200: None})
|
||||
@api_view(["GET"])
|
||||
def export_translations(request, slug, language, file_format):
|
||||
"""Export translations for a language in the specified format."""
|
||||
|
|
|
|||
|
|
@ -11,12 +11,14 @@ from apps.projects.models import Project
|
|||
from apps.resources.models import TranslatableString
|
||||
from apps.translations.models import Translation
|
||||
from apps.translations.serializers import (
|
||||
ProgressSerializer,
|
||||
TranslationSerializer,
|
||||
TranslationSuggestionSerializer,
|
||||
)
|
||||
from apps.translations.services import get_suggestions
|
||||
|
||||
|
||||
@extend_schema(request=TranslationSerializer, responses={201: TranslationSerializer})
|
||||
@api_view(["POST"])
|
||||
@permission_classes([IsTranslatorOrAbove])
|
||||
def create_translation(request, slug, string_id):
|
||||
|
|
@ -36,6 +38,7 @@ def create_translation(request, slug, string_id):
|
|||
return Response(serializer.data, status=status.HTTP_201_CREATED)
|
||||
|
||||
|
||||
@extend_schema(request=TranslationSerializer, responses={200: TranslationSerializer})
|
||||
@api_view(["PUT", "PATCH"])
|
||||
@permission_classes([IsTranslatorOrAbove])
|
||||
def update_translation(request, slug, string_id, language):
|
||||
|
|
@ -58,6 +61,7 @@ def update_translation(request, slug, string_id, language):
|
|||
return Response(serializer.data)
|
||||
|
||||
|
||||
@extend_schema(responses={200: ProgressSerializer})
|
||||
@api_view(["GET"])
|
||||
def translation_progress(request, slug):
|
||||
"""Get translation progress per language for a project."""
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue