mirror of
				https://github.com/encode/django-rest-framework.git
				synced 2025-11-04 09:57:55 +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