#7351: add more consistent exception name alias.

This commit is contained in:
Georg Brandl 2010-10-28 06:42:33 +00:00
parent b156a46b26
commit 4d54088599
4 changed files with 38 additions and 26 deletions

View File

@ -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

View File

@ -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)

View File

@ -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))

View File

@ -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.