[text] add 'build_query()'

This commit is contained in:
Mike Fährmann
2025-06-18 20:49:12 +02:00
parent b0580aba86
commit 8f79ec67f4
2 changed files with 25 additions and 1 deletions

View File

@@ -289,12 +289,19 @@ def parse_query_list(qs, as_list=()):
else:
result[name] = [value]
elif name not in result:
result[name] = unquote(value.replace("+", " "))
result[name] = value
except Exception:
pass
return result
def build_query(params):
return "&".join([
f"{quote(name)}={quote(value)}"
for name, value in params.items()
])
if sys.hexversion < 0x30c0000:
# Python <= 3.11
def parse_timestamp(ts, default=None):

View File

@@ -456,6 +456,8 @@ class TestText(unittest.TestCase):
self.assertEqual(f(""), {})
self.assertEqual(f("foo=1"), {"foo": "1"})
self.assertEqual(f("foo=1&bar=2"), {"foo": "1", "bar": "2"})
self.assertEqual(f("%C3%A4%26=%E3%81%82%E3%81%A8&%23=%3F"),
{"ä&": "あと", "#": "?"})
# missing value
self.assertEqual(f("bar"), {})
@@ -473,6 +475,21 @@ class TestText(unittest.TestCase):
for value in INVALID:
self.assertEqual(f(value), {})
def test_build_query(self, f=text.build_query):
# standard usage
self.assertEqual(f({}), "")
self.assertEqual(f({"foo": "1"}), "foo=1")
self.assertEqual(f({"foo": "1", "bar": "2"}), "foo=1&bar=2")
# missing value
self.assertEqual(f({"bar": ""}), "bar=")
self.assertEqual(f({"foo": "1", "bar": ""}), "foo=1&bar=")
self.assertEqual(f({"foo": "1", "bar": "", "baz": "3"}),
"foo=1&bar=&baz=3")
self.assertEqual(f({"ä&": "あと", "#": "?"}),
"%C3%A4%26=%E3%81%82%E3%81%A8&%23=%3F")
def test_parse_timestamp(self, f=text.parse_timestamp):
null = util.datetime_utcfromtimestamp(0)
value = util.datetime_utcfromtimestamp(1555816235)