diff options
author | Daniel Hahler <github@thequod.de> | 2018-10-30 15:18:38 +0100 |
---|---|---|
committer | Chris Dent <chris.dent@gmail.com> | 2018-10-30 14:18:38 +0000 |
commit | c58c1ae23f49c2701ea4ee53d017dd62b1d6f213 (patch) | |
tree | eb3749d48182495419e15b948079311d33b6f5f9 /paste | |
parent | 455203d2b3b0c898df6d3661cb1de577dfeda483 (diff) | |
download | paste-git-c58c1ae23f49c2701ea4ee53d017dd62b1d6f213.tar.gz |
py3 fixes for form handling in paste.fixture (#8)
* py3 fixes for form handling in paste.fixture
It uses "not six.PY2" in contrast to other places in the code to be
forward-compatible.
I've not looked too closely, but it might make sense to decode body/text
in the beginning already, instead of having it as bytes internally?!
Also, like mentioned in [1] already, it should probably use the correct
source encoding?!
1: https://github.com/cdent/paste/blob/36e5b8bd16a6063ec654faf04541f3a20d19f7fe/paste/fixture.py#L820
* Add test, using/fixing SlowConsumer form app
Diffstat (limited to 'paste')
-rwxr-xr-x | paste/debug/debugapp.py | 12 | ||||
-rw-r--r-- | paste/fixture.py | 17 |
2 files changed, 19 insertions, 10 deletions
diff --git a/paste/debug/debugapp.py b/paste/debug/debugapp.py index f752c36..ca5730e 100755 --- a/paste/debug/debugapp.py +++ b/paste/debug/debugapp.py @@ -54,14 +54,14 @@ class SlowConsumer(object): time.sleep(self.delay) body = "<html><body>%d bytes</body></html>" % size else: - body = ('<html><body>\n' - '<form method="post" enctype="multipart/form-data">\n' - '<input type="file" name="file">\n' - '<input type="submit" >\n' - '</form></body></html>\n') + body = (b'<html><body>\n' + b'<form method="post" enctype="multipart/form-data">\n' + b'<input type="file" name="file">\n' + b'<input type="submit" >\n' + b'</form></body></html>\n') print("bingles") start_response("200 OK", [('Content-Type', 'text/html'), - ('Content-Length', len(body))]) + ('Content-Length', str(len(body)))]) return [body] def make_test_app(global_conf): diff --git a/paste/fixture.py b/paste/fixture.py index cedf9a8..b10a706 100644 --- a/paste/fixture.py +++ b/paste/fixture.py @@ -557,7 +557,10 @@ class TestResponse(object): forms = self._forms_indexed = {} form_texts = [] started = None - for match in self._tag_re.finditer(self.body): + body = self.body + if not six.PY2: + body = body.decode('utf8', 'xmlcharrefreplace') + for match in self._tag_re.finditer(body): end = match.group(1) == '/' tag = match.group(2).lower() if tag != 'form': @@ -961,8 +964,11 @@ class Form(object): in_select = None in_textarea = None fields = {} - for match in self._tag_re.finditer(self.text): - end = match.group(1) == '/' + text = self.text + if not six.PY2: + text = text.decode('utf8', 'xmlcharrefreplace') + for match in self._tag_re.finditer(text): + end = match.group(1) == b'/' tag = match.group(2).lower() if tag not in ('input', 'select', 'option', 'textarea', 'button'): @@ -1020,7 +1026,10 @@ class Form(object): def _parse_action(self): self.action = None - for match in self._tag_re.finditer(self.text): + text = self.text + if not six.PY2: + text = text.decode('utf8', 'xmlcharrefreplace') + for match in self._tag_re.finditer(text): end = match.group(1) == '/' tag = match.group(2).lower() if tag != 'form': |