request: only preprocess form fields in py2 (#36515)
This commit is contained in:
parent
b73c5cc666
commit
07357b8549
|
@ -117,23 +117,32 @@ class CompatHTTPRequest(HTTPRequest):
|
|||
if not self.form:
|
||||
self.form = {}
|
||||
for k in self.django_request.POST:
|
||||
v = self.django_request.POST[k]
|
||||
if k.endswith('[]'):
|
||||
v = [x.encode(site_charset) for x in self.django_request.POST.getlist(k)]
|
||||
else:
|
||||
v = self.django_request.POST[k]
|
||||
if isinstance(v, unicode):
|
||||
v = v.encode(site_charset)
|
||||
if isinstance(k, unicode):
|
||||
k = k.encode(site_charset)
|
||||
v = [x for x in self.django_request.POST.getlist(k)]
|
||||
if six.PY2:
|
||||
if k.endswith('[]'):
|
||||
v = [x.encode(site_charset) for x in v]
|
||||
else:
|
||||
v = self.django_request.POST[k]
|
||||
if isinstance(v, unicode):
|
||||
v = v.encode(site_charset)
|
||||
if isinstance(k, unicode):
|
||||
k = k.encode(site_charset)
|
||||
self.form[k] = v
|
||||
|
||||
for k, upload_file in self.django_request.FILES.items():
|
||||
upload = Upload(upload_file.name.encode('utf-8'),
|
||||
upload_file.content_type.encode('utf-8'),
|
||||
upload_file.charset)
|
||||
if six.PY2:
|
||||
upload = Upload(upload_file.name.encode('utf-8'),
|
||||
upload_file.content_type.encode('utf-8'),
|
||||
upload_file.charset)
|
||||
if isinstance(k, unicode):
|
||||
k = k.encode(site_charset)
|
||||
else:
|
||||
upload = Upload(upload_file.name,
|
||||
upload_file.content_type,
|
||||
upload_file.charset)
|
||||
upload.fp = upload_file.file
|
||||
if isinstance(k, unicode):
|
||||
k = k.encode(site_charset)
|
||||
self.form[k] = upload
|
||||
|
||||
def build_absolute_uri(self):
|
||||
|
|
|
@ -19,6 +19,7 @@ import copy
|
|||
import re
|
||||
import time
|
||||
|
||||
from django.utils import six
|
||||
from quixote import get_session, get_publisher
|
||||
import quixote.http_request
|
||||
from quixote.errors import RequestError
|
||||
|
@ -130,11 +131,12 @@ class HTTPRequest(quixote.http_request.HTTPRequest):
|
|||
self._json = json_loads(payload)
|
||||
except ValueError as e:
|
||||
raise RequestError('invalid json payload (%s)' % str(e))
|
||||
# Make sure request.form doesn't contain unicode strings, converting
|
||||
# them all to strings encoded in the site charset.
|
||||
self.form = dict(
|
||||
(str(k), v.encode(self.charset) if isinstance(v, unicode) else v)
|
||||
for k, v in self.form.items())
|
||||
if six.PY2:
|
||||
# Make sure request.form doesn't contain unicode strings, converting
|
||||
# them all to strings encoded in the site charset.
|
||||
self.form = dict(
|
||||
(str(k), v.encode(self.charset) if isinstance(v, unicode) else v)
|
||||
for k, v in self.form.items())
|
||||
# remove characters that are not valid XML so it doesn't have to happen
|
||||
# down the chain.
|
||||
illegal_xml_chars = re.compile(u'[\x00-\x08\x0b\x0c\x0e-\x1f\ud800-\udfff\ufffe\uffff]')
|
||||
|
|
Loading…
Reference in New Issue