summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJust van Rossum <just@letterror.com>2002-12-12 12:23:32 (GMT)
committerJust van Rossum <just@letterror.com>2002-12-12 12:23:32 (GMT)
commitb083cb3901fcb7487c04ad996148d1cf0aa32350 (patch)
tree8a3558425da1c61b81a8f22ab7b0b98c2fe622cf
parent6c7e326eaaa2d814e0d299054f78e5bd187489ab (diff)
downloadcpython-b083cb3901fcb7487c04ad996148d1cf0aa32350.zip
cpython-b083cb3901fcb7487c04ad996148d1cf0aa32350.tar.gz
cpython-b083cb3901fcb7487c04ad996148d1cf0aa32350.tar.bz2
Patch #651621, approved by MvL.
This patch allows ZipFile.writestr() to be called with an archive file name instead of a ZipInfo instance: z = ZipFile("myarchive.zip", "w") z.writestr("foo/baz/file.ext", data) z.close() I found the old writestr() method very inconvenient for simple (but common) things. If called with a file name instead of a ZipInfo instance, the date_time is set to the current date/time, which makes sense to me for anonymous data.
-rw-r--r--Doc/lib/libzipfile.tex12
-rw-r--r--Lib/zipfile.py11
2 files changed, 16 insertions, 7 deletions
diff --git a/Doc/lib/libzipfile.tex b/Doc/lib/libzipfile.tex
index a6430cb..69e7878 100644
--- a/Doc/lib/libzipfile.tex
+++ b/Doc/lib/libzipfile.tex
@@ -146,11 +146,13 @@ cat myzip.zip >> python.exe
\code{'a'}.
\end{methoddesc}
-\begin{methoddesc}{writestr}{zinfo, bytes}
- Write the string \var{bytes} to the archive; meta-information is
- given as the \class{ZipInfo} instance \var{zinfo}. At least the
- filename, date, and time must be given by \var{zinfo}. The archive
- must be opened with mode \code{'w'} or \code{'a'}.
+\begin{methoddesc}{writestr}{zinfo_or_arcname, bytes}
+ Write the string \var{bytes} to the archive; \var{zinfo_or_arcname}
+ is either the file name it will be given in the archive, or a
+ \class{ZipInfo} instance. If it's an instance, at least the
+ filename, date, and time must be given. If it's a name, the date
+ and time is set to the current date and time. The archive must be
+ opened with mode \code{'w'} or \code{'a'}.
\end{methoddesc}
diff --git a/Lib/zipfile.py b/Lib/zipfile.py
index 4f2b946..6aed172 100644
--- a/Lib/zipfile.py
+++ b/Lib/zipfile.py
@@ -447,9 +447,16 @@ class ZipFile:
self.filelist.append(zinfo)
self.NameToInfo[zinfo.filename] = zinfo
- def writestr(self, zinfo, bytes):
+ def writestr(self, zinfo_or_arcname, bytes):
"""Write a file into the archive. The contents is the string
- 'bytes'."""
+ 'bytes'. 'zinfo_or_arcname' is either a ZipInfo instance or
+ the name of the file in the archive."""
+ if not isinstance(zinfo_or_arcname, ZipInfo):
+ zinfo = ZipInfo(filename=zinfo_or_arcname,
+ date_time=time.localtime(time.time()))
+ zinfo.compress_type = self.compression
+ else:
+ zinfo = zinfo_or_arcname
self._writecheck(zinfo)
zinfo.file_size = len(bytes) # Uncompressed size
zinfo.CRC = binascii.crc32(bytes) # CRC-32 checksum