Handle query string arguments without value (Fixes #149)
This commit is contained in:
@@ -404,13 +404,15 @@ class Request():
|
||||
data = MultiDict()
|
||||
if len(urlencoded) > 0:
|
||||
if isinstance(urlencoded, str):
|
||||
for k, v in [pair.split('=', 1)
|
||||
for pair in urlencoded.split('&') if pair]:
|
||||
data[urldecode_str(k)] = urldecode_str(v)
|
||||
for kv in [pair.split('=', 1)
|
||||
for pair in urlencoded.split('&') if pair]:
|
||||
data[urldecode_str(kv[0])] = urldecode_str(kv[1]) \
|
||||
if len(kv) > 1 else ''
|
||||
elif isinstance(urlencoded, bytes): # pragma: no branch
|
||||
for k, v in [pair.split(b'=', 1)
|
||||
for pair in urlencoded.split(b'&') if pair]:
|
||||
data[urldecode_bytes(k)] = urldecode_bytes(v)
|
||||
for kv in [pair.split(b'=', 1)
|
||||
for pair in urlencoded.split(b'&') if pair]:
|
||||
data[urldecode_bytes(kv[0])] = urldecode_bytes(kv[1]) \
|
||||
if len(kv) > 1 else b''
|
||||
return data
|
||||
|
||||
@property
|
||||
|
||||
@@ -39,11 +39,12 @@ class TestRequest(unittest.TestCase):
|
||||
self.assertEqual(req.body, b'aaa')
|
||||
|
||||
def test_args(self):
|
||||
fd = get_request_fd('GET', '/?foo=bar&abc=def&x=%2f%%')
|
||||
fd = get_request_fd('GET', '/?foo=bar&abc=def&foo&x=%2f%%')
|
||||
req = Request.create('app', fd, 'addr')
|
||||
self.assertEqual(req.query_string, 'foo=bar&abc=def&x=%2f%%')
|
||||
self.assertEqual(req.args, MultiDict(
|
||||
{'foo': 'bar', 'abc': 'def', 'x': '/%%'}))
|
||||
self.assertEqual(req.query_string, 'foo=bar&abc=def&foo&x=%2f%%')
|
||||
md = MultiDict({'foo': 'bar', 'abc': 'def', 'x': '/%%'})
|
||||
md['foo'] = ''
|
||||
self.assertEqual(req.args, md)
|
||||
|
||||
def test_badly_formatted_args(self):
|
||||
fd = get_request_fd('GET', '/?&foo=bar&abc=def&&&x=%2f%%')
|
||||
|
||||
@@ -49,11 +49,12 @@ class TestRequestAsync(unittest.TestCase):
|
||||
self.assertEqual(req.body, b'aaa')
|
||||
|
||||
def test_args(self):
|
||||
fd = get_async_request_fd('GET', '/?foo=bar&abc=def&x=%2f%%')
|
||||
fd = get_async_request_fd('GET', '/?foo=bar&abc=def&foo&x=%2f%%')
|
||||
req = _run(Request.create('app', fd, 'writer', 'addr'))
|
||||
self.assertEqual(req.query_string, 'foo=bar&abc=def&x=%2f%%')
|
||||
self.assertEqual(req.args, MultiDict(
|
||||
{'foo': 'bar', 'abc': 'def', 'x': '/%%'}))
|
||||
self.assertEqual(req.query_string, 'foo=bar&abc=def&foo&x=%2f%%')
|
||||
md = MultiDict({'foo': 'bar', 'abc': 'def', 'x': '/%%'})
|
||||
md['foo'] = ''
|
||||
self.assertEqual(req.args, md)
|
||||
|
||||
def test_json(self):
|
||||
fd = get_async_request_fd('GET', '/foo', headers={
|
||||
|
||||
Reference in New Issue
Block a user