summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRémi Lapeyre <remi.lapeyre@henki.fr>2019-05-27 15:43:45 +0200
committerCheryl Sabella <cheryl.sabella@gmail.com>2019-05-27 09:43:45 -0400
commit674ee1260025ff36f27e5d70ff6b66e3aab880bf (patch)
tree454d232beffc625bac7a51a9b2ae5e63818e774a
parent1f39c28e489cca0397fc4c3675d13569318122ac (diff)
downloadcpython-git-674ee1260025ff36f27e5d70ff6b66e3aab880bf.tar.gz
bpo-35397: Remove deprecation and document urllib.parse.unwrap (GH-11481)
-rw-r--r--Doc/library/urllib.parse.rst7
-rw-r--r--Doc/tools/susp-ignored.csv2
-rw-r--r--Lib/test/test_urlparse.py12
-rw-r--r--Lib/urllib/parse.py12
-rw-r--r--Lib/urllib/request.py8
-rw-r--r--Misc/NEWS.d/next/Documentation/2019-01-09-17-56-35.bpo-35397.ZMreIz.rst2
6 files changed, 24 insertions, 19 deletions
diff --git a/Doc/library/urllib.parse.rst b/Doc/library/urllib.parse.rst
index f9936288fd..49276daa7f 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 a34524bb67..a0e7868a03 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@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 d0365ecab7..4344765637 100644
--- a/Lib/test/test_urlparse.py
+++ b/Lib/test/test_urlparse.py
@@ -1169,8 +1169,10 @@ class Utility_Tests(unittest.TestCase):
'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 @@ class DeprecationTest(unittest.TestCase):
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 dfba704144..daefb2025b 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 afce8eb1a1..f6ce9cb6d5 100644
--- a/Lib/urllib/request.py
+++ b/Lib/urllib/request.py
@@ -101,7 +101,7 @@ import warnings
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 @@ class Request:
@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 @@ class URLopener:
# 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 @@ class URLopener:
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 0000000000..6dc7d3aebb
--- /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.