Re-add test for DELETE form param

master
Cristi Vîjdea 2018-12-23 18:28:13 +02:00
parent bebcc982e6
commit 7ce62616d2
2 changed files with 42 additions and 38 deletions

View File

@ -1,10 +1,10 @@
import datetime import datetime
import functools
from django.utils.decorators import method_decorator from django.utils.decorators import method_decorator
from django_filters.rest_framework import DjangoFilterBackend from django_filters.rest_framework import DjangoFilterBackend
from rest_framework import viewsets from rest_framework import viewsets
# noinspection PyDeprecation # noinspection PyDeprecation
from rest_framework.decorators import detail_route, list_route
from rest_framework.filters import OrderingFilter from rest_framework.filters import OrderingFilter
from rest_framework.pagination import LimitOffsetPagination from rest_framework.pagination import LimitOffsetPagination
from rest_framework.parsers import MultiPartParser from rest_framework.parsers import MultiPartParser
@ -62,7 +62,7 @@ class ArticlePagination(LimitOffsetPagination):
@method_decorator(name='list', decorator=swagger_auto_schema( @method_decorator(name='list', decorator=swagger_auto_schema(
operation_description="description from swagger_auto_schema via method_decorator", operation_description="description from swagger_auto_schema via method_decorator",
filter_inspectors=[DjangoFilterDescriptionInspector] filter_inspectors=[DjangoFilterDescriptionInspector],
)) ))
class ArticleViewSet(viewsets.ModelViewSet): class ArticleViewSet(viewsets.ModelViewSet):
""" """
@ -95,28 +95,13 @@ class ArticleViewSet(viewsets.ModelViewSet):
try: try:
from rest_framework.decorators import action from rest_framework.decorators import action
list_route = functools.partial(action, detail=False)
@swagger_auto_schema(auto_schema=NoPagingAutoSchema, filter_inspectors=[DjangoFilterDescriptionInspector]) detail_route = functools.partial(action, detail=True)
@action(detail=False, methods=['get'])
def today(self, request):
today_min = datetime.datetime.combine(datetime.date.today(), datetime.time.min)
today_max = datetime.datetime.combine(datetime.date.today(), datetime.time.max)
articles = self.get_queryset().filter(date_created__range=(today_min, today_max)).all()
serializer = self.serializer_class(articles, many=True)
return Response(serializer.data)
@swagger_auto_schema(method='get', operation_description="image GET description override")
@swagger_auto_schema(method='post', request_body=serializers.ImageUploadSerializer)
@action(detail=True, methods=['get', 'post'], parser_classes=(MultiPartParser,))
def image(self, request, slug=None):
"""
image method docstring
"""
pass
except ImportError: except ImportError:
# TODO: remove when dropping support for DRF 3.7
action = None action = None
from rest_framework.decorators import list_route, detail_route
# noinspection PyDeprecation
@swagger_auto_schema(auto_schema=NoPagingAutoSchema, filter_inspectors=[DjangoFilterDescriptionInspector]) @swagger_auto_schema(auto_schema=NoPagingAutoSchema, filter_inspectors=[DjangoFilterDescriptionInspector])
@list_route(methods=['get']) @list_route(methods=['get'])
def today(self, request): def today(self, request):
@ -126,10 +111,14 @@ class ArticleViewSet(viewsets.ModelViewSet):
serializer = self.serializer_class(articles, many=True) serializer = self.serializer_class(articles, many=True)
return Response(serializer.data) return Response(serializer.data)
# noinspection PyDeprecation
@swagger_auto_schema(method='get', operation_description="image GET description override") @swagger_auto_schema(method='get', operation_description="image GET description override")
@swagger_auto_schema(method='post', request_body=serializers.ImageUploadSerializer) @swagger_auto_schema(method='post', request_body=serializers.ImageUploadSerializer)
@detail_route(methods=['get', 'post'], parser_classes=(MultiPartParser,)) @swagger_auto_schema(method='delete', manual_parameters=[openapi.Parameter(
name='delete_form_param', in_=openapi.IN_FORM,
type=openapi.TYPE_INTEGER,
description="this should not crash (form parameter on DELETE method)"
)])
@detail_route(methods=['get', 'post', 'delete'], parser_classes=(MultiPartParser,))
def image(self, request, slug=None): def image(self, request, slug=None):
""" """
image method docstring image method docstring

View File

@ -249,6 +249,21 @@ paths:
- multipart/form-data - multipart/form-data
tags: tags:
- articles - articles
delete:
operationId: articles_image_delete
description: image method docstring
parameters:
- name: delete_form_param
in: formData
description: this should not crash (form parameter on DELETE method)
type: integer
responses:
'204':
description: ''
consumes:
- multipart/form-data
tags:
- articles
parameters: parameters:
- name: slug - name: slug
in: path in: path