From 340a60324cf163ae133489906835942c38dc6f0c Mon Sep 17 00:00:00 2001 From: Cristi Vijdea Date: Mon, 4 Mar 2019 00:48:55 +0200 Subject: [PATCH] Add special exclusion for FileUploadParser Fixes #288 --- src/drf_yasg/utils.py | 2 ++ testproj/articles/views.py | 4 ++-- testproj/snippets/views.py | 4 ++-- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/drf_yasg/utils.py b/src/drf_yasg/utils.py index dc8de25d..2a71c3ea 100644 --- a/src/drf_yasg/utils.py +++ b/src/drf_yasg/utils.py @@ -7,6 +7,7 @@ from django.utils.encoding import force_text from rest_framework import serializers, status from rest_framework.mixins import DestroyModelMixin, RetrieveModelMixin, UpdateModelMixin +from rest_framework.parsers import FileUploadParser from rest_framework.request import is_form_media_type from rest_framework.settings import api_settings as rest_framework_settings from rest_framework.utils import encoders, json @@ -366,6 +367,7 @@ def get_consumes(parser_classes): :rtype: list[str] """ parser_classes = get_object_classes(parser_classes) + parser_classes = [pc for pc in parser_classes if not issubclass(pc, FileUploadParser)] media_types = [parser.media_type for parser in parser_classes or []] non_form_media_types = [encoding for encoding in media_types if not is_form_media_type(encoding)] if len(non_form_media_types) == 0: diff --git a/testproj/articles/views.py b/testproj/articles/views.py index 0a630a76..e0884a9c 100644 --- a/testproj/articles/views.py +++ b/testproj/articles/views.py @@ -7,7 +7,7 @@ # noinspection PyDeprecation from rest_framework.filters import OrderingFilter from rest_framework.pagination import LimitOffsetPagination -from rest_framework.parsers import MultiPartParser +from rest_framework.parsers import MultiPartParser, FileUploadParser from rest_framework.response import Response from articles import serializers @@ -118,7 +118,7 @@ def today(self, request): type=openapi.TYPE_INTEGER, description="this should not crash (form parameter on DELETE method)" )]) - @detail_route(methods=['get', 'post', 'delete'], parser_classes=(MultiPartParser,)) + @detail_route(methods=['get', 'post', 'delete'], parser_classes=(MultiPartParser, FileUploadParser)) def image(self, request, slug=None): """ image method docstring diff --git a/testproj/snippets/views.py b/testproj/snippets/views.py index 3df0cab4..bf90d838 100644 --- a/testproj/snippets/views.py +++ b/testproj/snippets/views.py @@ -2,7 +2,7 @@ from djangorestframework_camel_case.render import CamelCaseJSONRenderer from inflection import camelize from rest_framework import generics, status -from rest_framework.parsers import FormParser +from rest_framework.parsers import FormParser, FileUploadParser from drf_yasg import openapi from drf_yasg.inspectors import SwaggerAutoSchema @@ -22,7 +22,7 @@ class SnippetList(generics.ListCreateAPIView): queryset = Snippet.objects.all() serializer_class = SnippetSerializer - parser_classes = (FormParser, CamelCaseJSONParser,) + parser_classes = (FormParser, CamelCaseJSONParser, FileUploadParser) renderer_classes = (CamelCaseJSONRenderer,) swagger_schema = CamelCaseOperationIDAutoSchema