diff --git a/gallery_dl/text.py b/gallery_dl/text.py index a7539ad7..98bba484 100644 --- a/gallery_dl/text.py +++ b/gallery_dl/text.py @@ -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("+", " ")) diff --git a/test/test_text.py b/test/test_text.py index 13029d24..0e187d75 100644 --- a/test/test_text.py +++ b/test/test_text.py @@ -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"})