New submission from Ian Stevens <iancstev...@gmail.com>:

The zipfile documentation (http://docs.python.org/library/zipfile.html) states:

"If the file is created with mode 'a' or 'w' and then close()d without adding 
any files to the archive, the appropriate ZIP structures for an empty archive 
will be written to the file."

This is not the case, eg.::

    >>> from StringIO import StringIO
    >>> import zipfile
    >>> s = StringIO()
    >>> z = zipfile.ZipFile(s, 'w')
    >>> z.close()
    >>> s.len
    0

The code for zipfile 
(http://svn.python.org/projects/python/trunk/Lib/zipfile.py) does not support 
the documentation either. The ending records are written only if 
ZipFile._didModify is True, and that attribute is only set to True if 
writestr() or write() are called.

Either the code should be fixed to support writing the ending records on an 
empty zip, or the documentation should be changed to reflect the existing 
behaviour.

Test case (for Lib/test/test_zipfile)::

    def test_close_empty_zip_creates_valid_zip(self):
        # Test that close() called on a ZipFile without write creates a valid 
ZIP.
        zf = zipfile.ZipFile(TESTFN, "w")
        zf.close()
        chk = zipfile.is_zipfile(TESTFN)
        self.assertTrue(chk)

----------
assignee: d...@python
components: Documentation, Library (Lib)
messages: 124433
nosy: Ian.Stevens, d...@python
priority: normal
severity: normal
status: open
title: zipfile does not write empty ZIP structure if close() called after 
__init__() as doc suggests
type: behavior
versions: Python 2.6

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue10748>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to