Skip to content

Commit

Permalink
bpo-36948: Fix NameError in urllib.request.URLopener.retrieve (python…
Browse files Browse the repository at this point in the history
  • Loading branch information
tirkarthi authored and berkerpeksag committed May 19, 2019
1 parent a5119e7 commit c661b30
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 6 deletions.
20 changes: 19 additions & 1 deletion Lib/test/test_urllib.py
Original file line number Diff line number Diff line change
Expand Up @@ -1445,7 +1445,7 @@ def test_thishost(self):
self.assertIsInstance(urllib.request.thishost(), tuple)


class URLopener_Tests(unittest.TestCase):
class URLopener_Tests(FakeHTTPMixin, unittest.TestCase):
"""Testcase to test the open method of URLopener class."""

def test_quoted_open(self):
Expand All @@ -1463,6 +1463,24 @@ def open_spam(self, url):
"spam://c:|windows%/:=&?~#+!$,;'@()*[]|/path/"),
"//c:|windows%/:=&?~#+!$,;'@()*[]|/path/")

@support.ignore_warnings(category=DeprecationWarning)
def test_urlopener_retrieve_file(self):
with support.temp_dir() as tmpdir:
fd, tmpfile = tempfile.mkstemp(dir=tmpdir)
os.close(fd)
fileurl = "file:" + urllib.request.pathname2url(tmpfile)
filename, _ = urllib.request.URLopener().retrieve(fileurl)
self.assertEqual(filename, tmpfile)

@support.ignore_warnings(category=DeprecationWarning)
def test_urlopener_retrieve_remote(self):
url = "http://www.python.org/file.txt"
self.fakehttp(b"HTTP/1.1 200 OK\r\n\r\nHello!")
self.addCleanup(self.unfakehttp)
filename, _ = urllib.request.URLopener().retrieve(url)
self.assertEqual(os.path.splitext(filename)[1], ".txt")


# Just commented them out.
# Can't really tell why keep failing in windows and sparc.
# Everywhere else they work ok, but on those machines, sometimes
Expand Down
10 changes: 5 additions & 5 deletions Lib/urllib/request.py
Original file line number Diff line number Diff line change
Expand Up @@ -1783,7 +1783,7 @@ def retrieve(self, url, filename=None, reporthook=None, data=None):
fp = self.open_local_file(url1)
hdrs = fp.info()
fp.close()
return url2pathname(splithost(url1)[1]), hdrs
return url2pathname(_splithost(url1)[1]), hdrs
except OSError as msg:
pass
fp = self.open(url, data)
Expand All @@ -1792,10 +1792,10 @@ def retrieve(self, url, filename=None, reporthook=None, data=None):
if filename:
tfp = open(filename, 'wb')
else:
garbage, path = splittype(url)
garbage, path = splithost(path or "")
path, garbage = splitquery(path or "")
path, garbage = splitattr(path or "")
garbage, path = _splittype(url)
garbage, path = _splithost(path or "")
path, garbage = _splitquery(path or "")
path, garbage = _splitattr(path or "")
suffix = os.path.splitext(path)[1]
(fd, filename) = tempfile.mkstemp(suffix)
self.__tempfiles.append(filename)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Fix :exc:`NameError` in :meth:`urllib.request.URLopener.retrieve`. Patch by
Karthikeyan Singaravelan.

0 comments on commit c661b30

Please sign in to comment.