diff options
author | Nils Philippsen <nils@redhat.com> | 2015-08-19 16:23:10 +0200 |
---|---|---|
committer | Nils Philippsen <nils@redhat.com> | 2015-08-19 16:23:10 +0200 |
commit | be0c07f218e59c14db599f416df2bc1956be0774 (patch) | |
tree | 2bee7bc9c75409feaa2c84db2ca13213d7902fd7 | |
parent | 6d1a54f51e8ef9040d9fbfb824f676ab2c1b4649 (diff) | |
download | paste-git-be0c07f218e59c14db599f416df2bc1956be0774.tar.gz |
Python 3: Don't mangle strangely encoded input
In Python 3, cgi.FieldStorage needs to know about encodings like
shiftjis in order to decode it properly (in Python 2 it's simply not
decoded at all).
Fixes tests.test_wsgiwrappers.test_wsgirequest_charset
-rw-r--r-- | paste/request.py | 11 | ||||
-rw-r--r-- | paste/wsgiwrappers.py | 3 |
2 files changed, 11 insertions, 3 deletions
diff --git a/paste/request.py b/paste/request.py index f0d91c1..8d5e5c3 100644 --- a/paste/request.py +++ b/paste/request.py @@ -140,7 +140,7 @@ def parse_dict_querystring(environ): environ['paste.parsed_dict_querystring'] = (multi, source) return multi -def parse_formvars(environ, include_get_vars=True): +def parse_formvars(environ, include_get_vars=True, encoding=None, errors=None): """Parses the request, returning a MultiDict of form variables. If ``include_get_vars`` is true then GET (query string) variables @@ -182,9 +182,16 @@ def parse_formvars(environ, include_get_vars=True): environ['CONTENT_TYPE'] = '' else: input = environ['wsgi.input'] + kwparms = {} + if six.PY3: + if encoding: + kwparms['encoding'] = encoding + if errors: + kwparms['errors'] = errors fs = cgi.FieldStorage(fp=input, environ=environ, - keep_blank_values=1) + keep_blank_values=1, + **kwparms) environ['QUERY_STRING'] = old_query_string if fake_out_cgi: environ['CONTENT_TYPE'] = old_content_type diff --git a/paste/wsgiwrappers.py b/paste/wsgiwrappers.py index 7b8f6de..674054f 100644 --- a/paste/wsgiwrappers.py +++ b/paste/wsgiwrappers.py @@ -199,7 +199,8 @@ class WSGIRequest(object): GET = property(GET, doc=GET.__doc__) def _POST(self): - return parse_formvars(self.environ, include_get_vars=False) + return parse_formvars(self.environ, include_get_vars=False, + encoding=self.charset, errors=self.errors) def POST(self): """Dictionary-like object representing the POST body. |