[Python-checkins] bpo-42967: coerce bytes separator to string in urllib.parse_qs(l) (GH-24818)
miss-islington
webhook-mailer at python.org
Sun Apr 11 09:49:43 EDT 2021
https://github.com/python/cpython/commit/6ec2fb42f93660810952388e5c4018c197c17c8c
commit: 6ec2fb42f93660810952388e5c4018c197c17c8c
branch: 3.9
author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com>
committer: miss-islington <31488909+miss-islington at users.noreply.github.com>
date: 2021-04-11T06:49:35-07:00
summary:
bpo-42967: coerce bytes separator to string in urllib.parse_qs(l) (GH-24818)
* coerce bytes separator to string
* Add news
* Update Misc/NEWS.d/next/Library/2021-03-11-00-31-41.bpo-42967.2PeQRw.rst
(cherry picked from commit b38601d49675d90e1ee6faa47f7adaeca992d02d)
Co-authored-by: Ken Jin <28750310+Fidget-Spinner at users.noreply.github.com>
files:
A Misc/NEWS.d/next/Library/2021-03-11-00-31-41.bpo-42967.2PeQRw.rst
M Lib/test/test_urlparse.py
M Lib/urllib/parse.py
diff --git a/Lib/test/test_urlparse.py b/Lib/test/test_urlparse.py
index 3b1c360625b5a..c543ac9a4ba72 100644
--- a/Lib/test/test_urlparse.py
+++ b/Lib/test/test_urlparse.py
@@ -893,6 +893,8 @@ def test_parse_qs_separator(self):
with self.subTest(f"Original: {orig!r}, Expected: {expect!r}"):
result = urllib.parse.parse_qs(orig, separator=';')
self.assertEqual(result, expect, "Error parsing %r" % orig)
+ result_bytes = urllib.parse.parse_qs(orig, separator=b';')
+ self.assertEqual(result_bytes, expect, "Error parsing %r" % orig)
def test_parse_qsl_separator(self):
@@ -912,6 +914,8 @@ def test_parse_qsl_separator(self):
with self.subTest(f"Original: {orig!r}, Expected: {expect!r}"):
result = urllib.parse.parse_qsl(orig, separator=';')
self.assertEqual(result, expect, "Error parsing %r" % orig)
+ result_bytes = urllib.parse.parse_qsl(orig, separator=b';')
+ self.assertEqual(result_bytes, expect, "Error parsing %r" % orig)
def test_urlencode_sequences(self):
diff --git a/Lib/urllib/parse.py b/Lib/urllib/parse.py
index 335e183498d8b..21cae47bf38a3 100644
--- a/Lib/urllib/parse.py
+++ b/Lib/urllib/parse.py
@@ -733,6 +733,7 @@ def parse_qsl(qs, keep_blank_values=False, strict_parsing=False,
Returns a list, as G-d intended.
"""
qs, _coerce_result = _coerce_args(qs)
+ separator, _ = _coerce_args(separator)
if not separator or (not isinstance(separator, (str, bytes))):
raise ValueError("Separator must be of type string or bytes.")
diff --git a/Misc/NEWS.d/next/Library/2021-03-11-00-31-41.bpo-42967.2PeQRw.rst b/Misc/NEWS.d/next/Library/2021-03-11-00-31-41.bpo-42967.2PeQRw.rst
new file mode 100644
index 0000000000000..f8ad3eaaedd78
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2021-03-11-00-31-41.bpo-42967.2PeQRw.rst
@@ -0,0 +1,3 @@
+Allow :class:`bytes` ``separator`` argument in ``urllib.parse.parse_qs`` and
+``urllib.parse.parse_qsl`` when parsing :class:`str` query strings. Previously,
+this raised a ``TypeError``.
More information about the Python-checkins
mailing list