diff options
author | Ronald Oussoren <ronaldoussoren@mac.com> | 2010-02-07 20:24:02 (GMT) |
---|---|---|
committer | Ronald Oussoren <ronaldoussoren@mac.com> | 2010-02-07 20:24:02 (GMT) |
commit | ee5c885fd2446dea7269c65248312a0856f50fd3 (patch) | |
tree | 2d2fdd42b64d0febbe419f35087e866c0ca0f5c9 | |
parent | 755740f3ea9c5005d16a80c07e7fc26e45f11aa1 (diff) | |
download | cpython-ee5c885fd2446dea7269c65248312a0856f50fd3.zip cpython-ee5c885fd2446dea7269c65248312a0856f50fd3.tar.gz cpython-ee5c885fd2446dea7269c65248312a0856f50fd3.tar.bz2 |
Merged revisions 78097 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r78097 | ronald.oussoren | 2010-02-07 21:18:02 +0100 (Sun, 07 Feb 2010) | 2 lines
Issue 6003: ZipFile.writestr "compression_type" argument
........
-rw-r--r-- | Doc/library/zipfile.rst | 9 | ||||
-rw-r--r-- | Lib/test/test_zipfile.py | 14 | ||||
-rw-r--r-- | Lib/zipfile.py | 5 | ||||
-rw-r--r-- | Misc/NEWS | 3 |
4 files changed, 29 insertions, 2 deletions
diff --git a/Doc/library/zipfile.rst b/Doc/library/zipfile.rst index 78f9299..7648e36 100644 --- a/Doc/library/zipfile.rst +++ b/Doc/library/zipfile.rst @@ -267,7 +267,7 @@ ZipFile Objects 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 @@ -277,6 +277,10 @@ ZipFile Objects 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, @@ -284,6 +288,9 @@ ZipFile Objects 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: diff --git a/Lib/test/test_zipfile.py b/Lib/test/test_zipfile.py index a925560..8e2cf55 100644 --- a/Lib/test/test_zipfile.py +++ b/Lib/test/test_zipfile.py @@ -407,6 +407,20 @@ class TestsWithSourceFile(unittest.TestCase): # 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. diff --git a/Lib/zipfile.py b/Lib/zipfile.py index d5caf26..2982ec3 100644 --- a/Lib/zipfile.py +++ b/Lib/zipfile.py @@ -1065,7 +1065,7 @@ class ZipFile: self.filelist.append(zinfo) self.NameToInfo[zinfo.filename] = zinfo - def writestr(self, zinfo_or_arcname, data): + def writestr(self, zinfo_or_arcname, data, compress_type=None): """Write a file into the archive. The contents is 'data', which may be either a 'str' or a 'bytes' instance; if it is a 'str', it is encoded as UTF-8 first. @@ -1087,6 +1087,9 @@ class ZipFile: zinfo.file_size = len(data) # Uncompressed size zinfo.header_offset = self.fp.tell() # Start of header data + if compress_type is not None: + zinfo.compress_type = compress_type + self._writecheck(zinfo) self._didModify = True zinfo.CRC = crc32(data) & 0xffffffff # CRC-32 checksum @@ -242,6 +242,9 @@ C-API Library ------- +- Issue #6003: add an argument to ``zipfile.Zipfile.writestr`` to + specify the compression type. + - Issue #4772: Raise a ValueError when an unknown Bluetooth protocol is specified, rather than fall through to AF_PACKET (in the `socket` module). Also, raise ValueError rather than TypeError when an unknown TIPC address |