[text] add 'empty' argument to 'parse_query()' (#8377)
enables including query parameters without value
This commit is contained in:
@@ -267,7 +267,7 @@ def parse_float(value, default=0.0):
|
||||
return default
|
||||
|
||||
|
||||
def parse_query(qs):
|
||||
def parse_query(qs, empty=False):
|
||||
"""Parse a query string into name-value pairs
|
||||
|
||||
Ignore values whose name has been seen before
|
||||
@@ -279,7 +279,7 @@ def parse_query(qs):
|
||||
try:
|
||||
for name_value in qs.split("&"):
|
||||
name, eq, value = name_value.partition("=")
|
||||
if eq:
|
||||
if eq or empty:
|
||||
name = unquote(name.replace("+", " "))
|
||||
if name not in result:
|
||||
result[name] = unquote(value.replace("+", " "))
|
||||
|
||||
@@ -459,11 +459,15 @@ class TestText(unittest.TestCase):
|
||||
# missing value
|
||||
self.assertEqual(f("bar"), {})
|
||||
self.assertEqual(f("bar="), {"bar": ""})
|
||||
self.assertEqual(f("bar", empty=True), {"bar": ""})
|
||||
self.assertEqual(f("foo=1&bar"), {"foo": "1"})
|
||||
self.assertEqual(f("foo=1&bar="), {"foo": "1", "bar": ""})
|
||||
self.assertEqual(f("foo=1&bar", True), {"foo": "1", "bar": ""})
|
||||
self.assertEqual(f("foo=1&bar&baz=3"), {"foo": "1", "baz": "3"})
|
||||
self.assertEqual(f("foo=1&bar=&baz=3"),
|
||||
{"foo": "1", "bar": "", "baz": "3"})
|
||||
self.assertEqual(f("foo=1&bar&baz=3", True),
|
||||
{"foo": "1", "bar": "", "baz": "3"})
|
||||
|
||||
# keys with identical names
|
||||
self.assertEqual(f("foo=1&foo=2"), {"foo": "1"})
|
||||
|
||||
Reference in New Issue
Block a user