[Python-checkins] python/dist/src/Lib urllib.py,1.166,1.167
birkenfeld@users.sourceforge.net
birkenfeld at users.sourceforge.net
Wed Aug 24 20:46:49 CEST 2005
Update of /cvsroot/python/python/dist/src/Lib
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11387/Lib
Modified Files:
urllib.py
Log Message:
Patch [ 1062060 ] fix for 1016880 urllib.urlretrieve silently truncates dwnld
Index: urllib.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/urllib.py,v
retrieving revision 1.166
retrieving revision 1.167
diff -u -d -r1.166 -r1.167
--- urllib.py 31 Dec 2004 19:15:26 -0000 1.166
+++ urllib.py 24 Aug 2005 18:46:39 -0000 1.167
@@ -86,6 +86,11 @@
if _urlopener:
_urlopener.cleanup()
+# exception raised when downloaded size does not match content-length
+class ContentTooShortError(IOError):
+ def __init__(self, message, content):
+ IOError.__init__(self, message)
+ self.content = content
ftpcache = {}
class URLopener:
@@ -228,24 +233,33 @@
self.tempcache[url] = result
bs = 1024*8
size = -1
+ read = 0
blocknum = 1
if reporthook:
if "content-length" in headers:
size = int(headers["Content-Length"])
reporthook(0, bs, size)
block = fp.read(bs)
+ read += len(block)
if reporthook:
reporthook(1, bs, size)
while block:
tfp.write(block)
block = fp.read(bs)
- blocknum = blocknum + 1
+ read += len(block)
+ blocknum += 1
if reporthook:
reporthook(blocknum, bs, size)
fp.close()
tfp.close()
del fp
del tfp
+
+ # raise exception if actual size does not match content-length header
+ if size >= 0 and read < size:
+ raise ContentTooShortError("retrieval incomplete: got only %i out "
+ "of %i bytes" % (read, size), result)
+
return result
# Each method named open_<type> knows how to open that type of URL
More information about the Python-checkins
mailing list