mirror of
https://github.com/python/cpython.git
synced 2025-07-28 21:55:21 +00:00
Patch #1675424: Added tests for uncovered code in the zipfile module.
The KeyError raised by Zipfile.getinfo for nonexistent names now has a descriptive message.
This commit is contained in:
parent
9467bc5ad1
commit
4b3ab6fcc0
4 changed files with 171 additions and 21 deletions
|
@ -568,8 +568,9 @@ class ZipFile:
|
|||
|
||||
def __init__(self, file, mode="r", compression=ZIP_STORED, allowZip64=False):
|
||||
"""Open the ZIP file with mode read "r", write "w" or append "a"."""
|
||||
self._allowZip64 = allowZip64
|
||||
self._didModify = False
|
||||
if mode not in ("r", "w", "a"):
|
||||
raise RuntimeError('ZipFile() requires mode "r", "w", or "a"')
|
||||
|
||||
if compression == ZIP_STORED:
|
||||
pass
|
||||
elif compression == ZIP_DEFLATED:
|
||||
|
@ -578,6 +579,9 @@ class ZipFile:
|
|||
"Compression requires the (missing) zlib module"
|
||||
else:
|
||||
raise RuntimeError, "That compression method is not supported"
|
||||
|
||||
self._allowZip64 = allowZip64
|
||||
self._didModify = False
|
||||
self.debug = 0 # Level of printing: 0 through 3
|
||||
self.NameToInfo = {} # Find file info given name
|
||||
self.filelist = [] # List of ZipInfo instances for archive
|
||||
|
@ -720,7 +724,12 @@ class ZipFile:
|
|||
|
||||
def getinfo(self, name):
|
||||
"""Return the instance of ZipInfo given 'name'."""
|
||||
return self.NameToInfo[name]
|
||||
info = self.NameToInfo.get(name)
|
||||
if info is None:
|
||||
raise KeyError(
|
||||
'There is no item named %r in the archive' % name)
|
||||
|
||||
return info
|
||||
|
||||
def setpassword(self, pwd):
|
||||
"""Set default password for encrypted files."""
|
||||
|
@ -824,6 +833,10 @@ class ZipFile:
|
|||
def write(self, filename, arcname=None, compress_type=None):
|
||||
"""Put the bytes from filename into the archive under the name
|
||||
arcname."""
|
||||
if not self.fp:
|
||||
raise RuntimeError(
|
||||
"Attempt to write to ZIP archive that was already closed")
|
||||
|
||||
st = os.stat(filename)
|
||||
mtime = time.localtime(st.st_mtime)
|
||||
date_time = mtime[0:6]
|
||||
|
@ -896,6 +909,11 @@ class ZipFile:
|
|||
zinfo.compress_type = self.compression
|
||||
else:
|
||||
zinfo = zinfo_or_arcname
|
||||
|
||||
if not self.fp:
|
||||
raise RuntimeError(
|
||||
"Attempt to write to ZIP archive that was already closed")
|
||||
|
||||
zinfo.file_size = len(bytes) # Uncompressed size
|
||||
zinfo.header_offset = self.fp.tell() # Start of header bytes
|
||||
self._writecheck(zinfo)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue