mirror of
https://github.com/encode/django-rest-framework.git
synced 2024-11-22 17:47:04 +03:00
Perform type check on passed request argument (#5618)
* Add test for wrapped request instance * Add 'request' argument type check to Request init * Fix metadata tests' request object
This commit is contained in:
parent
c2c9225782
commit
a91361dd2f
|
@ -11,7 +11,7 @@ The wrapped request then offers a richer API, in particular :
|
|||
from __future__ import unicode_literals
|
||||
|
||||
from django.conf import settings
|
||||
from django.http import QueryDict
|
||||
from django.http import HttpRequest, QueryDict
|
||||
from django.http.multipartparser import parse_header
|
||||
from django.http.request import RawPostDataException
|
||||
from django.utils import six
|
||||
|
@ -132,6 +132,12 @@ class Request(object):
|
|||
|
||||
def __init__(self, request, parsers=None, authenticators=None,
|
||||
negotiator=None, parser_context=None):
|
||||
assert isinstance(request, HttpRequest), (
|
||||
'The `request` argument must be an instance of '
|
||||
'`django.http.HttpRequest`, not `{}.{}`.'
|
||||
.format(request.__class__.__module__, request.__class__.__name__)
|
||||
)
|
||||
|
||||
self._request = request
|
||||
self.parsers = parsers or ()
|
||||
self.authenticators = authenticators or ()
|
||||
|
|
|
@ -9,12 +9,11 @@ from rest_framework import (
|
|||
exceptions, metadata, serializers, status, versioning, views
|
||||
)
|
||||
from rest_framework.renderers import BrowsableAPIRenderer
|
||||
from rest_framework.request import Request
|
||||
from rest_framework.test import APIRequestFactory
|
||||
|
||||
from .models import BasicModel
|
||||
|
||||
request = Request(APIRequestFactory().options('/'))
|
||||
request = APIRequestFactory().options('/')
|
||||
|
||||
|
||||
class TestMetadata:
|
||||
|
|
|
@ -25,6 +25,18 @@ from rest_framework.views import APIView
|
|||
factory = APIRequestFactory()
|
||||
|
||||
|
||||
class TestInitializer(TestCase):
|
||||
def test_request_type(self):
|
||||
request = Request(factory.get('/'))
|
||||
|
||||
message = (
|
||||
'The `request` argument must be an instance of '
|
||||
'`django.http.HttpRequest`, not `rest_framework.request.Request`.'
|
||||
)
|
||||
with self.assertRaisesMessage(AssertionError, message):
|
||||
Request(request)
|
||||
|
||||
|
||||
class PlainTextParser(BaseParser):
|
||||
media_type = 'text/plain'
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user