Test that get_serializer is not called when overriden
Views' ``get_serializer`` methods should not be called when the serializer is provided by ``request_body`` or ``responses``. Closes #154openapi3
parent
ee7b9a0734
commit
e0aec3ff45
|
|
@ -89,7 +89,8 @@ class SwaggerAutoSchema(ViewInspector):
|
||||||
try:
|
try:
|
||||||
return self.view.get_serializer()
|
return self.view.get_serializer()
|
||||||
except Exception:
|
except Exception:
|
||||||
log.warning("view's get_serializer raised exception (%s)", type(self.view).__name__, exc_info=True)
|
log.warning("view's get_serializer raised exception (%s %s %s)",
|
||||||
|
self.method, self.path, type(self.view).__name__, exc_info=True)
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def get_request_serializer(self):
|
def get_request_serializer(self):
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,8 @@
|
||||||
from rest_framework import viewsets
|
from rest_framework import viewsets
|
||||||
from rest_framework.generics import RetrieveAPIView
|
from rest_framework.generics import RetrieveAPIView
|
||||||
|
|
||||||
|
from drf_yasg.utils import swagger_auto_schema
|
||||||
|
|
||||||
from .models import Todo, TodoAnother, TodoTree, TodoYetAnother
|
from .models import Todo, TodoAnother, TodoTree, TodoYetAnother
|
||||||
from .serializer import (
|
from .serializer import (
|
||||||
TodoAnotherSerializer, TodoRecursiveSerializer, TodoSerializer, TodoTreeSerializer, TodoYetAnotherSerializer
|
TodoAnotherSerializer, TodoRecursiveSerializer, TodoSerializer, TodoTreeSerializer, TodoYetAnotherSerializer
|
||||||
|
|
@ -36,4 +38,35 @@ class TodoTreeView(viewsets.ReadOnlyModelViewSet):
|
||||||
|
|
||||||
class TodoRecursiveView(viewsets.ModelViewSet):
|
class TodoRecursiveView(viewsets.ModelViewSet):
|
||||||
queryset = TodoTree.objects.all()
|
queryset = TodoTree.objects.all()
|
||||||
serializer_class = TodoRecursiveSerializer
|
|
||||||
|
def get_serializer(self, *args, **kwargs):
|
||||||
|
raise NotImplementedError("must not call this")
|
||||||
|
|
||||||
|
def get_serializer_class(self):
|
||||||
|
raise NotImplementedError("must not call this")
|
||||||
|
|
||||||
|
def get_serializer_context(self):
|
||||||
|
raise NotImplementedError("must not call this")
|
||||||
|
|
||||||
|
@swagger_auto_schema(request_body=TodoRecursiveSerializer)
|
||||||
|
def create(self, request, *args, **kwargs):
|
||||||
|
return super(TodoRecursiveView, self).create(request, *args, **kwargs)
|
||||||
|
|
||||||
|
@swagger_auto_schema(responses={200: TodoRecursiveSerializer})
|
||||||
|
def retrieve(self, request, *args, **kwargs):
|
||||||
|
return super(TodoRecursiveView, self).retrieve(request, *args, **kwargs)
|
||||||
|
|
||||||
|
@swagger_auto_schema(request_body=TodoRecursiveSerializer)
|
||||||
|
def update(self, request, *args, **kwargs):
|
||||||
|
return super(TodoRecursiveView, self).update(request, *args, **kwargs)
|
||||||
|
|
||||||
|
@swagger_auto_schema(request_body=TodoRecursiveSerializer)
|
||||||
|
def partial_update(self, request, *args, **kwargs):
|
||||||
|
return super(TodoRecursiveView, self).update(request, *args, **kwargs)
|
||||||
|
|
||||||
|
def destroy(self, request, *args, **kwargs):
|
||||||
|
return super(TodoRecursiveView, self).destroy(request, *args, **kwargs)
|
||||||
|
|
||||||
|
@swagger_auto_schema(responses={200: TodoRecursiveSerializer(many=True)})
|
||||||
|
def list(self, request, *args, **kwargs):
|
||||||
|
return super(TodoRecursiveView, self).list(request, *args, **kwargs)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue