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``. |