aboutsummaryrefslogtreecommitdiffstats
path: root/gallery_dl/text.py
diff options
context:
space:
mode:
authorLibravatarUnit 193 <unit193@unit193.net>2024-10-14 03:02:11 -0400
committerLibravatarUnit 193 <unit193@unit193.net>2024-10-14 03:02:11 -0400
commitb28a9957b772b1d063bea4a50c0bbcb04cdef791 (patch)
treebdf3b3bafb821af5cd41206d66c4a0b7a60e2a92 /gallery_dl/text.py
parent061cbaf29e92e57152175f877740d3d1a2157bd6 (diff)
parent0db541f524e1774865efebcbe5653e9ad76ea2e8 (diff)
Update upstream source from tag 'upstream/1.27.6'
Update to upstream version '1.27.6' with Debian dir bbafbef8a09f7a005c8afa3ebb1c8527d67c172a
Diffstat (limited to 'gallery_dl/text.py')
-rw-r--r--gallery_dl/text.py45
1 files changed, 41 insertions, 4 deletions
diff --git a/gallery_dl/text.py b/gallery_dl/text.py
index 8517cdf..5fd5a40 100644
--- a/gallery_dl/text.py
+++ b/gallery_dl/text.py
@@ -238,12 +238,49 @@ def parse_float(value, default=0.0):
def parse_query(qs):
- """Parse a query string into key-value pairs"""
+ """Parse a query string into name-value pairs
+
+ Ignore values whose name has been seen before
+ """
+ if not qs:
+ return {}
+
+ result = {}
+ try:
+ for name_value in qs.split("&"):
+ name, eq, value = name_value.partition("=")
+ if eq:
+ name = unquote(name.replace("+", " "))
+ if name not in result:
+ result[name] = unquote(value.replace("+", " "))
+ except Exception:
+ pass
+ return result
+
+
+def parse_query_list(qs):
+ """Parse a query string into name-value pairs
+
+ Combine values of duplicate names into lists
+ """
+ if not qs:
+ return {}
+
result = {}
try:
- for key, value in urllib.parse.parse_qsl(qs):
- if key not in result:
- result[key] = value
+ for name_value in qs.split("&"):
+ name, eq, value = name_value.partition("=")
+ if eq:
+ name = unquote(name.replace("+", " "))
+ value = unquote(value.replace("+", " "))
+ if name in result:
+ rvalue = result[name]
+ if isinstance(rvalue, list):
+ rvalue.append(value)
+ else:
+ result[name] = [rvalue, value]
+ else:
+ result[name] = value
except Exception:
pass
return result