bpo-42967: coerce bytes separator to string in urllib.parse_qs(l) (#2… · python/cpython@b38601d (original) (raw)

3 files changed

lines changed

Original file line number Diff line number Diff line change
@@ -893,6 +893,8 @@ def test_parse_qs_separator(self):
893 893 with self.subTest(f"Original: {orig!r}, Expected: {expect!r}"):
894 894 result = urllib.parse.parse_qs(orig, separator=';')
895 895 self.assertEqual(result, expect, "Error parsing %r" % orig)
896 +result_bytes = urllib.parse.parse_qs(orig, separator=b';')
897 +self.assertEqual(result_bytes, expect, "Error parsing %r" % orig)
896 898
897 899
898 900 def test_parse_qsl_separator(self):
@@ -912,6 +914,8 @@ def test_parse_qsl_separator(self):
912 914 with self.subTest(f"Original: {orig!r}, Expected: {expect!r}"):
913 915 result = urllib.parse.parse_qsl(orig, separator=';')
914 916 self.assertEqual(result, expect, "Error parsing %r" % orig)
917 +result_bytes = urllib.parse.parse_qsl(orig, separator=b';')
918 +self.assertEqual(result_bytes, expect, "Error parsing %r" % orig)
915 919
916 920
917 921 def test_urlencode_sequences(self):
Original file line number Diff line number Diff line change
@@ -733,6 +733,7 @@ def parse_qsl(qs, keep_blank_values=False, strict_parsing=False,
733 733 Returns a list, as G-d intended.
734 734 """
735 735 qs, _coerce_result = _coerce_args(qs)
736 +separator, _ = _coerce_args(separator)
736 737
737 738 if not separator or (not isinstance(separator, (str, bytes))):
738 739 raise ValueError("Separator must be of type string or bytes.")
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
1 +Allow :class:`bytes` ``separator`` argument in ``urllib.parse.parse_qs`` and
2 +``urllib.parse.parse_qsl`` when parsing :class:`str` query strings. Previously,
3 +this raised a ``TypeError``.