Patch #1668100: urllib2 now correctly raises URLError instead of
OSError if accessing a local file via the file:// protocol fails.
This commit is contained in:
parent
8f032cbb05
commit
ceede5c359
|
@ -626,11 +626,11 @@ class HandlerTests(unittest.TestCase):
|
|||
|
||||
for url in [
|
||||
"file://localhost:80%s" % urlpath,
|
||||
# XXXX bug: these fail with socket.gaierror, should be URLError
|
||||
## "file://%s:80%s/%s" % (socket.gethostbyname('localhost'),
|
||||
## os.getcwd(), TESTFN),
|
||||
## "file://somerandomhost.ontheinternet.com%s/%s" %
|
||||
## (os.getcwd(), TESTFN),
|
||||
"file:///file_does_not_exist.txt",
|
||||
"file://%s:80%s/%s" % (socket.gethostbyname('localhost'),
|
||||
os.getcwd(), TESTFN),
|
||||
"file://somerandomhost.ontheinternet.com%s/%s" %
|
||||
(os.getcwd(), TESTFN),
|
||||
]:
|
||||
try:
|
||||
f = open(TESTFN, "wb")
|
||||
|
|
|
@ -1214,19 +1214,23 @@ class FileHandler(BaseHandler):
|
|||
host = req.get_host()
|
||||
file = req.get_selector()
|
||||
localfile = url2pathname(file)
|
||||
stats = os.stat(localfile)
|
||||
size = stats.st_size
|
||||
modified = email.utils.formatdate(stats.st_mtime, usegmt=True)
|
||||
mtype = mimetypes.guess_type(file)[0]
|
||||
headers = mimetools.Message(StringIO(
|
||||
'Content-type: %s\nContent-length: %d\nLast-modified: %s\n' %
|
||||
(mtype or 'text/plain', size, modified)))
|
||||
if host:
|
||||
host, port = splitport(host)
|
||||
if not host or \
|
||||
(not port and socket.gethostbyname(host) in self.get_names()):
|
||||
return addinfourl(open(localfile, 'rb'),
|
||||
headers, 'file:'+file)
|
||||
try:
|
||||
stats = os.stat(localfile)
|
||||
size = stats.st_size
|
||||
modified = email.utils.formatdate(stats.st_mtime, usegmt=True)
|
||||
mtype = mimetypes.guess_type(file)[0]
|
||||
headers = mimetools.Message(StringIO(
|
||||
'Content-type: %s\nContent-length: %d\nLast-modified: %s\n' %
|
||||
(mtype or 'text/plain', size, modified)))
|
||||
if host:
|
||||
host, port = splitport(host)
|
||||
if not host or \
|
||||
(not port and socket.gethostbyname(host) in self.get_names()):
|
||||
return addinfourl(open(localfile, 'rb'),
|
||||
headers, 'file:'+file)
|
||||
except OSError, msg:
|
||||
# urllib2 users shouldn't expect OSErrors coming from urlopen()
|
||||
raise URLError(msg)
|
||||
raise URLError('file not on local host')
|
||||
|
||||
class FTPHandler(BaseHandler):
|
||||
|
|
|
@ -168,6 +168,9 @@ Core and builtins
|
|||
Library
|
||||
-------
|
||||
|
||||
- Patch #1668100: urllib2 now correctly raises URLError instead of
|
||||
OSError if accessing a local file via the file:// protocol fails.
|
||||
|
||||
- Patch #1677862: Require a space or tab after import in .pth files.
|
||||
|
||||
- Patch #1192590: Fix pdb's "ignore" and "condition" commands so they trap
|
||||
|
|
Loading…
Reference in New Issue