diff options
author | 2021-02-16 01:00:20 +0800 | |
---|---|---|
committer | 2021-02-15 09:00:20 -0800 | |
commit | a2f0654b0a5b4c4f726155620002cc1f5f2d206a (patch) | |
tree | 52779bb7707f1c778e1f547656307a13020eaeee | |
parent | bpo-43181: Convert PyObject_TypeCheck to static inline function (GH-24533) (diff) | |
download | cpython-a2f0654b0a5b4c4f726155620002cc1f5f2d206a.tar.gz cpython-a2f0654b0a5b4c4f726155620002cc1f5f2d206a.tar.bz2 cpython-a2f0654b0a5b4c4f726155620002cc1f5f2d206a.zip |
bpo-42967: Fix urllib.parse docs and make logic clearer (GH-24536)
-rw-r--r-- | Doc/library/urllib.parse.rst | 18 | ||||
-rw-r--r-- | Doc/whatsnew/3.6.rst | 4 | ||||
-rw-r--r-- | Doc/whatsnew/3.8.rst | 4 | ||||
-rw-r--r-- | Doc/whatsnew/3.9.rst | 4 | ||||
-rw-r--r-- | Lib/urllib/parse.py | 3 |
5 files changed, 19 insertions, 14 deletions
diff --git a/Doc/library/urllib.parse.rst b/Doc/library/urllib.parse.rst index 1a79078239..67c2120819 100644 --- a/Doc/library/urllib.parse.rst +++ b/Doc/library/urllib.parse.rst @@ -190,7 +190,8 @@ or on combining URL components into a URL string. read. If set, then throws a :exc:`ValueError` if there are more than *max_num_fields* fields read. - The optional argument *separator* is the symbol to use for separating the query arguments. It defaults to `&`. + The optional argument *separator* is the symbol to use for separating the + query arguments. It defaults to ``&``. Use the :func:`urllib.parse.urlencode` function (with the ``doseq`` parameter set to ``True``) to convert such dictionaries into query @@ -204,8 +205,10 @@ or on combining URL components into a URL string. Added *max_num_fields* parameter. .. versionchanged:: 3.10 - Added *separator* parameter with the default value of `&`. Python versions earlier than Python 3.10 allowed using both ";" and "&" as - query parameter separator. This has been changed to allow only a single separator key, with "&" as the default separator. + Added *separator* parameter with the default value of ``&``. Python + versions earlier than Python 3.10 allowed using both ``;`` and ``&`` as + query parameter separator. This has been changed to allow only a single + separator key, with ``&`` as the default separator. .. function:: parse_qsl(qs, keep_blank_values=False, strict_parsing=False, encoding='utf-8', errors='replace', max_num_fields=None, separator='&') @@ -232,7 +235,8 @@ or on combining URL components into a URL string. read. If set, then throws a :exc:`ValueError` if there are more than *max_num_fields* fields read. - The optional argument *separator* is the symbol to use for separating the query arguments. It defaults to `&`. + The optional argument *separator* is the symbol to use for separating the + query arguments. It defaults to ``&``. Use the :func:`urllib.parse.urlencode` function to convert such lists of pairs into query strings. @@ -244,8 +248,10 @@ or on combining URL components into a URL string. Added *max_num_fields* parameter. .. versionchanged:: 3.10 - Added *separator* parameter with the default value of `&`. Python versions earlier than Python 3.10 allowed using both ";" and "&" as - query parameter separator. This has been changed to allow only a single separator key, with "&" as the default separator. + Added *separator* parameter with the default value of ``&``. Python + versions earlier than Python 3.10 allowed using both ``;`` and ``&`` as + query parameter separator. This has been changed to allow only a single + separator key, with ``&`` as the default separator. .. function:: urlunparse(parts) diff --git a/Doc/whatsnew/3.6.rst b/Doc/whatsnew/3.6.rst index 8a64da1b24..03a877a3d9 100644 --- a/Doc/whatsnew/3.6.rst +++ b/Doc/whatsnew/3.6.rst @@ -2447,11 +2447,11 @@ details, see the documentation for ``loop.create_datagram_endpoint()``. Notable changes in Python 3.6.13 ================================ -Earlier Python versions allowed using both ";" and "&" as +Earlier Python versions allowed using both ``;`` and ``&`` as query parameter separators in :func:`urllib.parse.parse_qs` and :func:`urllib.parse.parse_qsl`. Due to security concerns, and to conform with newer W3C recommendations, this has been changed to allow only a single -separator key, with "&" as the default. This change also affects +separator key, with ``&`` as the default. This change also affects :func:`cgi.parse` and :func:`cgi.parse_multipart` as they use the affected functions internally. For more details, please see their respective documentation. diff --git a/Doc/whatsnew/3.8.rst b/Doc/whatsnew/3.8.rst index d21921d3dd..91afffb58a 100644 --- a/Doc/whatsnew/3.8.rst +++ b/Doc/whatsnew/3.8.rst @@ -2238,11 +2238,11 @@ details, see the documentation for ``loop.create_datagram_endpoint()``. Notable changes in Python 3.8.8 =============================== -Earlier Python versions allowed using both ";" and "&" as +Earlier Python versions allowed using both ``;`` and ``&`` as query parameter separators in :func:`urllib.parse.parse_qs` and :func:`urllib.parse.parse_qsl`. Due to security concerns, and to conform with newer W3C recommendations, this has been changed to allow only a single -separator key, with "&" as the default. This change also affects +separator key, with ``&`` as the default. This change also affects :func:`cgi.parse` and :func:`cgi.parse_multipart` as they use the affected functions internally. For more details, please see their respective documentation. diff --git a/Doc/whatsnew/3.9.rst b/Doc/whatsnew/3.9.rst index 5f4f8ba211..3086930569 100644 --- a/Doc/whatsnew/3.9.rst +++ b/Doc/whatsnew/3.9.rst @@ -1520,11 +1520,11 @@ become a :exc:`TypeError` in Python 3.10. urllib.parse ------------ -Earlier Python versions allowed using both ";" and "&" as +Earlier Python versions allowed using both ``;`` and ``&`` as query parameter separators in :func:`urllib.parse.parse_qs` and :func:`urllib.parse.parse_qsl`. Due to security concerns, and to conform with newer W3C recommendations, this has been changed to allow only a single -separator key, with "&" as the default. This change also affects +separator key, with ``&`` as the default. This change also affects :func:`cgi.parse` and :func:`cgi.parse_multipart` as they use the affected functions internally. For more details, please see their respective documentation. diff --git a/Lib/urllib/parse.py b/Lib/urllib/parse.py index 5bd067895b..335e183498 100644 --- a/Lib/urllib/parse.py +++ b/Lib/urllib/parse.py @@ -734,8 +734,7 @@ def parse_qsl(qs, keep_blank_values=False, strict_parsing=False, """ qs, _coerce_result = _coerce_args(qs) - if not separator or (not isinstance(separator, str) - and not isinstance(separator, bytes)): + if not separator or (not isinstance(separator, (str, bytes))): raise ValueError("Separator must be of type string or bytes.") # If max_num_fields is defined then check that the number of fields |