[Python-checkins] bpo-35397: Remove deprecation and document urllib.parse.unwrap (GH-11481)

Cheryl Sabella webhook-mailer at python.org
Mon May 27 09:43:49 EDT 2019


https://github.com/python/cpython/commit/674ee1260025ff36f27e5d70ff6b66e3aab880bf
commit: 674ee1260025ff36f27e5d70ff6b66e3aab880bf
branch: master
author: Rémi Lapeyre <remi.lapeyre at henki.fr>
committer: Cheryl Sabella <cheryl.sabella at gmail.com>
date: 2019-05-27T09:43:45-04:00
summary:

bpo-35397: Remove deprecation and document urllib.parse.unwrap (GH-11481)

files:
A Misc/NEWS.d/next/Documentation/2019-01-09-17-56-35.bpo-35397.ZMreIz.rst
M Doc/library/urllib.parse.rst
M Doc/tools/susp-ignored.csv
M Lib/test/test_urlparse.py
M Lib/urllib/parse.py
M Lib/urllib/request.py

diff --git a/Doc/library/urllib.parse.rst b/Doc/library/urllib.parse.rst
index f9936288fd42..49276daa7ff4 100644
--- a/Doc/library/urllib.parse.rst
+++ b/Doc/library/urllib.parse.rst
@@ -370,6 +370,13 @@ or on combining URL components into a URL string.
    .. versionchanged:: 3.2
       Result is a structured object rather than a simple 2-tuple.
 
+.. function:: unwrap(url)
+
+   Extract the url from a wrapped URL (that is, a string formatted as
+   ``<URL:scheme://host/path>``, ``<scheme://host/path>``, ``URL:scheme://host/path``
+   or ``scheme://host/path``). If *url* is not a wrapped URL, it is returned
+   without changes.
+
 .. _parsing-ascii-encoded-bytes:
 
 Parsing ASCII Encoded Bytes
diff --git a/Doc/tools/susp-ignored.csv b/Doc/tools/susp-ignored.csv
index a34524bb673e..a0e7868a037a 100644
--- a/Doc/tools/susp-ignored.csv
+++ b/Doc/tools/susp-ignored.csv
@@ -236,6 +236,8 @@ library/urllib.request,,:close,Connection:close
 library/urllib.request,,:port,:port
 library/urllib.request,,:lang,"xmlns=""http://www.w3.org/1999/xhtml"" xml:lang=""en"" lang=""en"">\n\n<head>\n"
 library/urllib.request,,:password,"""joe:password at python.org"""
+library/urllib.parse,,:scheme,<URL:scheme://host/path>
+library/urllib.parse,,:scheme,URL:scheme://host/path
 library/uuid,,:uuid,urn:uuid:12345678-1234-5678-1234-567812345678
 library/venv,,:param,":param nodist: If True, setuptools and pip are not installed into the"
 library/venv,,:param,":param progress: If setuptools or pip are installed, the progress of the"
diff --git a/Lib/test/test_urlparse.py b/Lib/test/test_urlparse.py
index d0365ecab72c..434476563764 100644
--- a/Lib/test/test_urlparse.py
+++ b/Lib/test/test_urlparse.py
@@ -1169,8 +1169,10 @@ def test_to_bytes(self):
                           'http://www.python.org/medi\u00e6val')
 
     def test_unwrap(self):
-        url = urllib.parse._unwrap('<URL:type://host/path>')
-        self.assertEqual(url, 'type://host/path')
+        for wrapped_url in ('<URL:scheme://host/path>', '<scheme://host/path>',
+                            'URL:scheme://host/path', 'scheme://host/path'):
+            url = urllib.parse.unwrap(wrapped_url)
+            self.assertEqual(url, 'scheme://host/path')
 
 
 class DeprecationTest(unittest.TestCase):
@@ -1251,12 +1253,6 @@ def test_to_bytes_deprecation(self):
         self.assertEqual(str(cm.warning),
                          'urllib.parse.to_bytes() is deprecated as of 3.8')
 
-    def test_unwrap(self):
-        with self.assertWarns(DeprecationWarning) as cm:
-            urllib.parse.unwrap('')
-        self.assertEqual(str(cm.warning),
-                         'urllib.parse.unwrap() is deprecated as of 3.8')
-
 
 if __name__ == "__main__":
     unittest.main()
diff --git a/Lib/urllib/parse.py b/Lib/urllib/parse.py
index dfba704144e9..daefb2025b14 100644
--- a/Lib/urllib/parse.py
+++ b/Lib/urllib/parse.py
@@ -979,17 +979,15 @@ def _to_bytes(url):
 
 
 def unwrap(url):
-    warnings.warn("urllib.parse.unwrap() is deprecated as of 3.8",
-                  DeprecationWarning, stacklevel=2)
-    return _unwrap(url)
-
+    """Transform a string like '<URL:scheme://host/path>' into 'scheme://host/path'.
 
-def _unwrap(url):
-    """unwrap('<URL:type://host/path>') --> 'type://host/path'."""
+    The string is returned unchanged if it's not a wrapped URL.
+    """
     url = str(url).strip()
     if url[:1] == '<' and url[-1:] == '>':
         url = url[1:-1].strip()
-    if url[:4] == 'URL:': url = url[4:].strip()
+    if url[:4] == 'URL:':
+        url = url[4:].strip()
     return url
 
 
diff --git a/Lib/urllib/request.py b/Lib/urllib/request.py
index afce8eb1a1b1..f6ce9cb6d586 100644
--- a/Lib/urllib/request.py
+++ b/Lib/urllib/request.py
@@ -101,7 +101,7 @@
 
 from urllib.error import URLError, HTTPError, ContentTooShortError
 from urllib.parse import (
-    urlparse, urlsplit, urljoin, _unwrap, quote, unquote,
+    urlparse, urlsplit, urljoin, unwrap, quote, unquote,
     _splittype, _splithost, _splitport, _splituser, _splitpasswd,
     _splitattr, _splitquery, _splitvalue, _splittag, _to_bytes,
     unquote_to_bytes, urlunparse)
@@ -349,7 +349,7 @@ def full_url(self):
     @full_url.setter
     def full_url(self, url):
         # unwrap('<URL:type://host/path>') --> 'type://host/path'
-        self._full_url = _unwrap(url)
+        self._full_url = unwrap(url)
         self._full_url, self.fragment = _splittag(self._full_url)
         self._parse()
 
@@ -1727,7 +1727,7 @@ def addheader(self, *args):
     # External interface
     def open(self, fullurl, data=None):
         """Use URLopener().open(file) instead of open(file, 'r')."""
-        fullurl = _unwrap(_to_bytes(fullurl))
+        fullurl = unwrap(_to_bytes(fullurl))
         fullurl = quote(fullurl, safe="%/:=&?~#+!$,;'@()*[]|")
         if self.tempcache and fullurl in self.tempcache:
             filename, headers = self.tempcache[fullurl]
@@ -1775,7 +1775,7 @@ def open_unknown_proxy(self, proxy, fullurl, data=None):
     def retrieve(self, url, filename=None, reporthook=None, data=None):
         """retrieve(url) returns (filename, headers) for a local object
         or (tempfilename, headers) for a remote object."""
-        url = _unwrap(_to_bytes(url))
+        url = unwrap(_to_bytes(url))
         if self.tempcache and url in self.tempcache:
             return self.tempcache[url]
         type, url1 = _splittype(url)
diff --git a/Misc/NEWS.d/next/Documentation/2019-01-09-17-56-35.bpo-35397.ZMreIz.rst b/Misc/NEWS.d/next/Documentation/2019-01-09-17-56-35.bpo-35397.ZMreIz.rst
new file mode 100644
index 000000000000..6dc7d3aebb1a
--- /dev/null
+++ b/Misc/NEWS.d/next/Documentation/2019-01-09-17-56-35.bpo-35397.ZMreIz.rst
@@ -0,0 +1,2 @@
+Remove deprecation and document urllib.parse.unwrap(). Patch contributed by
+Rémi Lapeyre.



More information about the Python-checkins mailing list