#7351: add more consistent exception name alias.
This commit is contained in:
parent
b156a46b26
commit
4d54088599
|
@ -24,10 +24,18 @@ For other archive formats, see the :mod:`bz2`, :mod:`gzip`, and
|
||||||
|
|
||||||
The module defines the following items:
|
The module defines the following items:
|
||||||
|
|
||||||
.. exception:: BadZipfile
|
.. exception:: BadZipFile
|
||||||
|
|
||||||
The error raised for bad ZIP files (old name: ``zipfile.error``).
|
The error raised for bad ZIP files (old name: ``zipfile.error``).
|
||||||
|
|
||||||
|
.. versionadded:: 3.2
|
||||||
|
|
||||||
|
|
||||||
|
.. exception:: BadZipfile
|
||||||
|
|
||||||
|
This is an alias for :exc:`BadZipFile` that exists for compatibility with
|
||||||
|
Python versions prior to 3.2. Usage is deprecated.
|
||||||
|
|
||||||
|
|
||||||
.. exception:: LargeZipFile
|
.. exception:: LargeZipFile
|
||||||
|
|
||||||
|
|
|
@ -463,8 +463,8 @@ class TestsWithSourceFile(unittest.TestCase):
|
||||||
|
|
||||||
try:
|
try:
|
||||||
with zipfile.ZipFile(TESTFN2, "r") as zipfp2:
|
with zipfile.ZipFile(TESTFN2, "r") as zipfp2:
|
||||||
raise zipfile.BadZipfile()
|
raise zipfile.BadZipFile()
|
||||||
except zipfile.BadZipfile:
|
except zipfile.BadZipFile:
|
||||||
self.assertTrue(zipfp2.fp is None, 'zipfp is not closed')
|
self.assertTrue(zipfp2.fp is None, 'zipfp is not closed')
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
|
@ -723,7 +723,7 @@ class OtherTests(unittest.TestCase):
|
||||||
fp.write("this is not a legal zip file\n")
|
fp.write("this is not a legal zip file\n")
|
||||||
try:
|
try:
|
||||||
zf = zipfile.ZipFile(TESTFN)
|
zf = zipfile.ZipFile(TESTFN)
|
||||||
except zipfile.BadZipfile:
|
except zipfile.BadZipFile:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def test_is_zip_erroneous_file(self):
|
def test_is_zip_erroneous_file(self):
|
||||||
|
@ -786,11 +786,11 @@ class OtherTests(unittest.TestCase):
|
||||||
def test_empty_file_raises_BadZipFile(self):
|
def test_empty_file_raises_BadZipFile(self):
|
||||||
f = open(TESTFN, 'w')
|
f = open(TESTFN, 'w')
|
||||||
f.close()
|
f.close()
|
||||||
self.assertRaises(zipfile.BadZipfile, zipfile.ZipFile, TESTFN)
|
self.assertRaises(zipfile.BadZipFile, zipfile.ZipFile, TESTFN)
|
||||||
|
|
||||||
with open(TESTFN, 'w') as fp:
|
with open(TESTFN, 'w') as fp:
|
||||||
fp.write("short file")
|
fp.write("short file")
|
||||||
self.assertRaises(zipfile.BadZipfile, zipfile.ZipFile, TESTFN)
|
self.assertRaises(zipfile.BadZipFile, zipfile.ZipFile, TESTFN)
|
||||||
|
|
||||||
def test_closed_zip_raises_RuntimeError(self):
|
def test_closed_zip_raises_RuntimeError(self):
|
||||||
"""Verify that testzip() doesn't swallow inappropriate exceptions."""
|
"""Verify that testzip() doesn't swallow inappropriate exceptions."""
|
||||||
|
@ -912,23 +912,23 @@ class OtherTests(unittest.TestCase):
|
||||||
self.check_testzip_with_bad_crc(zipfile.ZIP_DEFLATED)
|
self.check_testzip_with_bad_crc(zipfile.ZIP_DEFLATED)
|
||||||
|
|
||||||
def check_read_with_bad_crc(self, compression):
|
def check_read_with_bad_crc(self, compression):
|
||||||
"""Tests that files with bad CRCs raise a BadZipfile exception when read."""
|
"""Tests that files with bad CRCs raise a BadZipFile exception when read."""
|
||||||
zipdata = self.zips_with_bad_crc[compression]
|
zipdata = self.zips_with_bad_crc[compression]
|
||||||
|
|
||||||
# Using ZipFile.read()
|
# Using ZipFile.read()
|
||||||
with zipfile.ZipFile(io.BytesIO(zipdata), mode="r") as zipf:
|
with zipfile.ZipFile(io.BytesIO(zipdata), mode="r") as zipf:
|
||||||
self.assertRaises(zipfile.BadZipfile, zipf.read, 'afile')
|
self.assertRaises(zipfile.BadZipFile, zipf.read, 'afile')
|
||||||
|
|
||||||
# Using ZipExtFile.read()
|
# Using ZipExtFile.read()
|
||||||
with zipfile.ZipFile(io.BytesIO(zipdata), mode="r") as zipf:
|
with zipfile.ZipFile(io.BytesIO(zipdata), mode="r") as zipf:
|
||||||
with zipf.open('afile', 'r') as corrupt_file:
|
with zipf.open('afile', 'r') as corrupt_file:
|
||||||
self.assertRaises(zipfile.BadZipfile, corrupt_file.read)
|
self.assertRaises(zipfile.BadZipFile, corrupt_file.read)
|
||||||
|
|
||||||
# Same with small reads (in order to exercise the buffering logic)
|
# Same with small reads (in order to exercise the buffering logic)
|
||||||
with zipfile.ZipFile(io.BytesIO(zipdata), mode="r") as zipf:
|
with zipfile.ZipFile(io.BytesIO(zipdata), mode="r") as zipf:
|
||||||
with zipf.open('afile', 'r') as corrupt_file:
|
with zipf.open('afile', 'r') as corrupt_file:
|
||||||
corrupt_file.MIN_READ_SIZE = 2
|
corrupt_file.MIN_READ_SIZE = 2
|
||||||
with self.assertRaises(zipfile.BadZipfile):
|
with self.assertRaises(zipfile.BadZipFile):
|
||||||
while corrupt_file.read(2):
|
while corrupt_file.read(2):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@ -978,11 +978,11 @@ class OtherTests(unittest.TestCase):
|
||||||
|
|
||||||
def test_open_empty_file(self):
|
def test_open_empty_file(self):
|
||||||
# Issue 1710703: Check that opening a file with less than 22 bytes
|
# Issue 1710703: Check that opening a file with less than 22 bytes
|
||||||
# raises a BadZipfile exception (rather than the previously unhelpful
|
# raises a BadZipFile exception (rather than the previously unhelpful
|
||||||
# IOError)
|
# IOError)
|
||||||
f = open(TESTFN, 'w')
|
f = open(TESTFN, 'w')
|
||||||
f.close()
|
f.close()
|
||||||
self.assertRaises(zipfile.BadZipfile, zipfile.ZipFile, TESTFN, 'r')
|
self.assertRaises(zipfile.BadZipFile, zipfile.ZipFile, TESTFN, 'r')
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
unlink(TESTFN)
|
unlink(TESTFN)
|
||||||
|
|
|
@ -22,10 +22,10 @@ except ImportError:
|
||||||
zlib = None
|
zlib = None
|
||||||
crc32 = binascii.crc32
|
crc32 = binascii.crc32
|
||||||
|
|
||||||
__all__ = ["BadZipfile", "error", "ZIP_STORED", "ZIP_DEFLATED", "is_zipfile",
|
__all__ = ["BadZipFile", "BadZipfile", "error", "ZIP_STORED", "ZIP_DEFLATED",
|
||||||
"ZipInfo", "ZipFile", "PyZipFile", "LargeZipFile" ]
|
"is_zipfile", "ZipInfo", "ZipFile", "PyZipFile", "LargeZipFile"]
|
||||||
|
|
||||||
class BadZipfile(Exception):
|
class BadZipFile(Exception):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
@ -35,7 +35,8 @@ class LargeZipFile(Exception):
|
||||||
and those extensions are disabled.
|
and those extensions are disabled.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
error = BadZipfile # The exception raised by this module
|
error = BadZipfile = BadZipFile # Pre-3.2 compatibility names
|
||||||
|
|
||||||
|
|
||||||
ZIP64_LIMIT = (1 << 31) - 1
|
ZIP64_LIMIT = (1 << 31) - 1
|
||||||
ZIP_FILECOUNT_LIMIT = 1 << 16
|
ZIP_FILECOUNT_LIMIT = 1 << 16
|
||||||
|
@ -180,7 +181,7 @@ def _EndRecData64(fpin, offset, endrec):
|
||||||
return endrec
|
return endrec
|
||||||
|
|
||||||
if diskno != 0 or disks != 1:
|
if diskno != 0 or disks != 1:
|
||||||
raise BadZipfile("zipfiles that span multiple disks are not supported")
|
raise BadZipZile("zipfiles that span multiple disks are not supported")
|
||||||
|
|
||||||
# Assume no 'zip64 extensible data'
|
# Assume no 'zip64 extensible data'
|
||||||
fpin.seek(offset - sizeEndCentDir64Locator - sizeEndCentDir64, 2)
|
fpin.seek(offset - sizeEndCentDir64Locator - sizeEndCentDir64, 2)
|
||||||
|
@ -592,7 +593,7 @@ class ZipExtFile(io.BufferedIOBase):
|
||||||
self._running_crc = crc32(newdata, self._running_crc) & 0xffffffff
|
self._running_crc = crc32(newdata, self._running_crc) & 0xffffffff
|
||||||
# Check the CRC if we're at the end of the file
|
# Check the CRC if we're at the end of the file
|
||||||
if eof and self._running_crc != self._expected_crc:
|
if eof and self._running_crc != self._expected_crc:
|
||||||
raise BadZipfile("Bad CRC-32 for file %r" % self.name)
|
raise BadZipFile("Bad CRC-32 for file %r" % self.name)
|
||||||
|
|
||||||
def read1(self, n):
|
def read1(self, n):
|
||||||
"""Read up to n bytes with at most one read() system call."""
|
"""Read up to n bytes with at most one read() system call."""
|
||||||
|
@ -720,7 +721,7 @@ class ZipFile:
|
||||||
self._RealGetContents()
|
self._RealGetContents()
|
||||||
# seek to start of directory and overwrite
|
# seek to start of directory and overwrite
|
||||||
self.fp.seek(self.start_dir, 0)
|
self.fp.seek(self.start_dir, 0)
|
||||||
except BadZipfile:
|
except BadZipFile:
|
||||||
# file is not a zip file, just append
|
# file is not a zip file, just append
|
||||||
self.fp.seek(0, 2)
|
self.fp.seek(0, 2)
|
||||||
|
|
||||||
|
@ -744,7 +745,7 @@ class ZipFile:
|
||||||
is bad."""
|
is bad."""
|
||||||
try:
|
try:
|
||||||
self._RealGetContents()
|
self._RealGetContents()
|
||||||
except BadZipfile:
|
except BadZipFile:
|
||||||
if not self._filePassed:
|
if not self._filePassed:
|
||||||
self.fp.close()
|
self.fp.close()
|
||||||
self.fp = None
|
self.fp = None
|
||||||
|
@ -756,9 +757,9 @@ class ZipFile:
|
||||||
try:
|
try:
|
||||||
endrec = _EndRecData(fp)
|
endrec = _EndRecData(fp)
|
||||||
except IOError:
|
except IOError:
|
||||||
raise BadZipfile("File is not a zip file")
|
raise BadZipFile("File is not a zip file")
|
||||||
if not endrec:
|
if not endrec:
|
||||||
raise BadZipfile("File is not a zip file")
|
raise BadZipFile("File is not a zip file")
|
||||||
if self.debug > 1:
|
if self.debug > 1:
|
||||||
print(endrec)
|
print(endrec)
|
||||||
size_cd = endrec[_ECD_SIZE] # bytes in central directory
|
size_cd = endrec[_ECD_SIZE] # bytes in central directory
|
||||||
|
@ -783,7 +784,7 @@ class ZipFile:
|
||||||
while total < size_cd:
|
while total < size_cd:
|
||||||
centdir = fp.read(sizeCentralDir)
|
centdir = fp.read(sizeCentralDir)
|
||||||
if centdir[0:4] != stringCentralDir:
|
if centdir[0:4] != stringCentralDir:
|
||||||
raise BadZipfile("Bad magic number for central directory")
|
raise BadZipFile("Bad magic number for central directory")
|
||||||
centdir = struct.unpack(structCentralDir, centdir)
|
centdir = struct.unpack(structCentralDir, centdir)
|
||||||
if self.debug > 2:
|
if self.debug > 2:
|
||||||
print(centdir)
|
print(centdir)
|
||||||
|
@ -854,7 +855,7 @@ class ZipFile:
|
||||||
f = self.open(zinfo.filename, "r")
|
f = self.open(zinfo.filename, "r")
|
||||||
while f.read(chunk_size): # Check CRC-32
|
while f.read(chunk_size): # Check CRC-32
|
||||||
pass
|
pass
|
||||||
except BadZipfile:
|
except BadZipFile:
|
||||||
return zinfo.filename
|
return zinfo.filename
|
||||||
|
|
||||||
def getinfo(self, name):
|
def getinfo(self, name):
|
||||||
|
@ -903,7 +904,7 @@ class ZipFile:
|
||||||
# Skip the file header:
|
# Skip the file header:
|
||||||
fheader = zef_file.read(sizeFileHeader)
|
fheader = zef_file.read(sizeFileHeader)
|
||||||
if fheader[0:4] != stringFileHeader:
|
if fheader[0:4] != stringFileHeader:
|
||||||
raise BadZipfile("Bad magic number for file header")
|
raise BadZipFile("Bad magic number for file header")
|
||||||
|
|
||||||
fheader = struct.unpack(structFileHeader, fheader)
|
fheader = struct.unpack(structFileHeader, fheader)
|
||||||
fname = zef_file.read(fheader[_FH_FILENAME_LENGTH])
|
fname = zef_file.read(fheader[_FH_FILENAME_LENGTH])
|
||||||
|
@ -911,7 +912,7 @@ class ZipFile:
|
||||||
zef_file.read(fheader[_FH_EXTRA_FIELD_LENGTH])
|
zef_file.read(fheader[_FH_EXTRA_FIELD_LENGTH])
|
||||||
|
|
||||||
if fname != zinfo.orig_filename.encode("utf-8"):
|
if fname != zinfo.orig_filename.encode("utf-8"):
|
||||||
raise BadZipfile(
|
raise BadZipFile(
|
||||||
'File name in directory %r and header %r differ.'
|
'File name in directory %r and header %r differ.'
|
||||||
% (zinfo.orig_filename, fname))
|
% (zinfo.orig_filename, fname))
|
||||||
|
|
||||||
|
|
|
@ -51,6 +51,9 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue #7351: Add ``zipfile.BadZipFile`` spelling of the exception name
|
||||||
|
and deprecate the old name ``zipfile.BadZipfile``.
|
||||||
|
|
||||||
- Issue #5027: The standard ``xml`` namespace is now understood by
|
- Issue #5027: The standard ``xml`` namespace is now understood by
|
||||||
xml.sax.saxutils.XMLGenerator as being bound to
|
xml.sax.saxutils.XMLGenerator as being bound to
|
||||||
http://www.w3.org/XML/1998/namespace. Patch by Troy J. Farrell.
|
http://www.w3.org/XML/1998/namespace. Patch by Troy J. Farrell.
|
||||||
|
|
Loading…
Reference in New Issue