compat: only add compat implementation of RequestFactory.generic() if not

provided by django
This commit is contained in:
Markus Korn 2015-06-22 14:05:56 +02:00
parent d86e494e86
commit 06c61fc511

View File

@ -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