[text] add 'empty' argument to 'parse_query()' (#8377)

enables including query parameters without value
This commit is contained in:
Mike Fährmann
2025-10-09 12:10:23 +02:00
parent af0b68d533
commit 724ae3661b
2 changed files with 6 additions and 2 deletions

View File

@@ -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("+", " "))

View File

@@ -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"})