Add special exclusion for FileUploadParser

Fixes #288
master
Cristi Vijdea 2019-03-04 00:48:55 +02:00
parent f348084d85
commit 340a60324c
3 changed files with 6 additions and 4 deletions

View File

@ -7,6 +7,7 @@ from django.db import models
from django.utils.encoding import force_text from django.utils.encoding import force_text
from rest_framework import serializers, status from rest_framework import serializers, status
from rest_framework.mixins import DestroyModelMixin, RetrieveModelMixin, UpdateModelMixin 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.request import is_form_media_type
from rest_framework.settings import api_settings as rest_framework_settings from rest_framework.settings import api_settings as rest_framework_settings
from rest_framework.utils import encoders, json from rest_framework.utils import encoders, json
@ -366,6 +367,7 @@ def get_consumes(parser_classes):
:rtype: list[str] :rtype: list[str]
""" """
parser_classes = get_object_classes(parser_classes) 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 []] 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)] non_form_media_types = [encoding for encoding in media_types if not is_form_media_type(encoding)]
if len(non_form_media_types) == 0: if len(non_form_media_types) == 0:

View File

@ -7,7 +7,7 @@ from rest_framework import viewsets
# noinspection PyDeprecation # noinspection PyDeprecation
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, FileUploadParser
from rest_framework.response import Response from rest_framework.response import Response
from articles import serializers from articles import serializers
@ -118,7 +118,7 @@ class ArticleViewSet(viewsets.ModelViewSet):
type=openapi.TYPE_INTEGER, type=openapi.TYPE_INTEGER,
description="this should not crash (form parameter on DELETE method)" 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): def image(self, request, slug=None):
""" """
image method docstring image method docstring

View File

@ -2,7 +2,7 @@ from djangorestframework_camel_case.parser import CamelCaseJSONParser
from djangorestframework_camel_case.render import CamelCaseJSONRenderer from djangorestframework_camel_case.render import CamelCaseJSONRenderer
from inflection import camelize from inflection import camelize
from rest_framework import generics, status 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 import openapi
from drf_yasg.inspectors import SwaggerAutoSchema from drf_yasg.inspectors import SwaggerAutoSchema
@ -22,7 +22,7 @@ class SnippetList(generics.ListCreateAPIView):
queryset = Snippet.objects.all() queryset = Snippet.objects.all()
serializer_class = SnippetSerializer serializer_class = SnippetSerializer
parser_classes = (FormParser, CamelCaseJSONParser,) parser_classes = (FormParser, CamelCaseJSONParser, FileUploadParser)
renderer_classes = (CamelCaseJSONRenderer,) renderer_classes = (CamelCaseJSONRenderer,)
swagger_schema = CamelCaseOperationIDAutoSchema swagger_schema = CamelCaseOperationIDAutoSchema