mirror of
				https://github.com/encode/django-rest-framework.git
				synced 2025-11-04 18:08:03 +03:00 
			
		
		
		
	compat: only add compat implementation of RequestFactory.generic() if not
provided by django
This commit is contained in:
		
							parent
							
								
									d86e494e86
								
							
						
					
					
						commit
						06c61fc511
					
				| 
						 | 
					@ -199,8 +199,6 @@ if 'patch' not in View.http_method_names:
 | 
				
			||||||
    View.http_method_names = View.http_method_names + ['patch']
 | 
					    View.http_method_names = View.http_method_names + ['patch']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# RequestFactory only provides `generic` from 1.5 onwards
 | 
					 | 
				
			||||||
from django.test.client import RequestFactory as DjangoRequestFactory
 | 
					 | 
				
			||||||
from django.test.client import FakePayload
 | 
					from django.test.client import FakePayload
 | 
				
			||||||
 | 
					
 | 
				
			||||||
try:
 | 
					try:
 | 
				
			||||||
| 
						 | 
					@ -211,24 +209,30 @@ except ImportError:
 | 
				
			||||||
    from django.utils.encoding import smart_str as force_bytes_or_smart_bytes
 | 
					    from django.utils.encoding import smart_str as force_bytes_or_smart_bytes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class RequestFactory(DjangoRequestFactory):
 | 
					# RequestFactory only provides `generic` from 1.5 onwards
 | 
				
			||||||
    def generic(self, method, path,
 | 
					if django.VERSION < (1, 5):
 | 
				
			||||||
            data='', content_type='application/octet-stream', **extra):
 | 
					    from django.test.client import RequestFactory as DjangoRequestFactory
 | 
				
			||||||
        parsed = _urlparse(path)
 | 
					
 | 
				
			||||||
        data = force_bytes_or_smart_bytes(data, settings.DEFAULT_CHARSET)
 | 
					    class RequestFactory(DjangoRequestFactory):
 | 
				
			||||||
        r = {
 | 
					        def generic(self, method, path,
 | 
				
			||||||
            'PATH_INFO': self._get_path(parsed),
 | 
					                data='', content_type='application/octet-stream', **extra):
 | 
				
			||||||
            'QUERY_STRING': force_text(parsed[4]),
 | 
					            parsed = _urlparse(path)
 | 
				
			||||||
            'REQUEST_METHOD': six.text_type(method),
 | 
					            data = force_bytes_or_smart_bytes(data, settings.DEFAULT_CHARSET)
 | 
				
			||||||
        }
 | 
					            r = {
 | 
				
			||||||
        if data:
 | 
					                'PATH_INFO': self._get_path(parsed),
 | 
				
			||||||
            r.update({
 | 
					                'QUERY_STRING': force_text(parsed[4]),
 | 
				
			||||||
                'CONTENT_LENGTH': len(data),
 | 
					                'REQUEST_METHOD': six.text_type(method),
 | 
				
			||||||
                'CONTENT_TYPE': six.text_type(content_type),
 | 
					            }
 | 
				
			||||||
                'wsgi.input': FakePayload(data),
 | 
					            if data:
 | 
				
			||||||
            })
 | 
					                r.update({
 | 
				
			||||||
        r.update(extra)
 | 
					                    'CONTENT_LENGTH': len(data),
 | 
				
			||||||
        return self.request(**r)
 | 
					                    'CONTENT_TYPE': six.text_type(content_type),
 | 
				
			||||||
 | 
					                    'wsgi.input': FakePayload(data),
 | 
				
			||||||
 | 
					                })
 | 
				
			||||||
 | 
					            r.update(extra)
 | 
				
			||||||
 | 
					            return self.request(**r)
 | 
				
			||||||
 | 
					else:
 | 
				
			||||||
 | 
					    from django.test.client import RequestFactory
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Markdown is optional
 | 
					# Markdown is optional
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user