[Python-checkins] r78097 - in python/trunk: Doc/library/zipfile.rst Lib/test/test_zipfile.py Lib/zipfile.py Misc/NEWS
ronald.oussoren
python-checkins at python.org
Sun Feb 7 21:18:03 CET 2010
Author: ronald.oussoren
Date: Sun Feb 7 21:18:02 2010
New Revision: 78097
Log:
Issue 6003: ZipFile.writestr "compression_type" argument
Modified:
python/trunk/Doc/library/zipfile.rst
python/trunk/Lib/test/test_zipfile.py
python/trunk/Lib/zipfile.py
python/trunk/Misc/NEWS
Modified: python/trunk/Doc/library/zipfile.rst
==============================================================================
--- python/trunk/Doc/library/zipfile.rst (original)
+++ python/trunk/Doc/library/zipfile.rst Sun Feb 7 21:18:02 2010
@@ -284,7 +284,7 @@
byte, the name of the file in the archive will be truncated at the null byte.
-.. method:: ZipFile.writestr(zinfo_or_arcname, bytes)
+.. method:: ZipFile.writestr(zinfo_or_arcname, bytes[, compress_type])
Write the string *bytes* to the archive; *zinfo_or_arcname* is either the file
name it will be given in the archive, or a :class:`ZipInfo` instance. If it's
@@ -294,6 +294,10 @@
created with mode ``'r'`` will raise a :exc:`RuntimeError`. Calling
:meth:`writestr` on a closed ZipFile will raise a :exc:`RuntimeError`.
+ If given, *compress_type* overrides the value given for the *compression*
+ parameter to the constructor for the new entry, or in the *zinfo_or_arcname*
+ (if that is a :class:`ZipInfo` instance).
+
.. note::
When passing a :class:`ZipInfo` instance as the *zinfo_or_acrname* parameter,
@@ -301,6 +305,9 @@
member of the given :class:`ZipInfo` instance. By default, the
:class:`ZipInfo` constructor sets this member to :const:`ZIP_STORED`.
+ .. versionchanged:: 2.7
+ The *compression_type* argument.
+
The following data attributes are also available:
Modified: python/trunk/Lib/test/test_zipfile.py
==============================================================================
--- python/trunk/Lib/test/test_zipfile.py (original)
+++ python/trunk/Lib/test/test_zipfile.py Sun Feb 7 21:18:02 2010
@@ -408,6 +408,20 @@
# remove the test file subdirectories
shutil.rmtree(os.path.join(os.getcwd(), 'ziptest2dir'))
+ def test_writestr_compression(self):
+ zipfp = zipfile.ZipFile(TESTFN2, "w")
+ zipfp.writestr("a.txt", "hello world", compress_type=zipfile.ZIP_STORED)
+ if zlib:
+ zipfp.writestr("b.txt", "hello world", compress_type=zipfile.ZIP_DEFLATED)
+
+ info = zipfp.getinfo('a.txt')
+ self.assertEqual(info.compress_type, zipfile.ZIP_STORED)
+
+ if zlib:
+ info = zipfp.getinfo('b.txt')
+ self.assertEqual(info.compress_type, zipfile.ZIP_DEFLATED)
+
+
def zip_test_writestr_permissions(self, f, compression):
# Make sure that writestr creates files with mode 0600,
# when it is passed a name rather than a ZipInfo instance.
Modified: python/trunk/Lib/zipfile.py
==============================================================================
--- python/trunk/Lib/zipfile.py (original)
+++ python/trunk/Lib/zipfile.py Sun Feb 7 21:18:02 2010
@@ -1063,13 +1063,14 @@
self.filelist.append(zinfo)
self.NameToInfo[zinfo.filename] = zinfo
- def writestr(self, zinfo_or_arcname, bytes):
+ def writestr(self, zinfo_or_arcname, bytes, compress_type=None):
"""Write a file into the archive. The contents is the string
'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())[:6])
+
zinfo.compress_type = self.compression
zinfo.external_attr = 0600 << 16
else:
@@ -1079,6 +1080,9 @@
raise RuntimeError(
"Attempt to write to ZIP archive that was already closed")
+ if compress_type is not None:
+ zinfo.compress_type = compress_type
+
zinfo.file_size = len(bytes) # Uncompressed size
zinfo.header_offset = self.fp.tell() # Start of header bytes
self._writecheck(zinfo)
Modified: python/trunk/Misc/NEWS
==============================================================================
--- python/trunk/Misc/NEWS (original)
+++ python/trunk/Misc/NEWS Sun Feb 7 21:18:02 2010
@@ -15,6 +15,9 @@
Library
-------
+- Issue #6003: add an argument to ``zipfile.Zipfile.writestr`` to
+ specify the compression type.
+
What's New in Python 2.7 alpha 3?
=================================
More information about the Python-checkins
mailing list