[Python-Dev] [Python-checkins] r86699 - python/branches/py3k/Lib/zipfile.py
Benjamin Peterson
benjamin at python.org
Tue Nov 23 00:47:16 CET 2010
No test?
2010/11/22 lukasz.langa <python-checkins at python.org>:
> Author: lukasz.langa
> Date: Tue Nov 23 00:31:26 2010
> New Revision: 86699
>
> Log:
> Issue #9846: ZipExtFile provides no mechanism for closing the underlying file object
>
>
>
> Modified:
> python/branches/py3k/Lib/zipfile.py
>
> Modified: python/branches/py3k/Lib/zipfile.py
> ==============================================================================
> --- python/branches/py3k/Lib/zipfile.py (original)
> +++ python/branches/py3k/Lib/zipfile.py Tue Nov 23 00:31:26 2010
> @@ -473,9 +473,11 @@
> # Search for universal newlines or line chunks.
> PATTERN = re.compile(br'^(?P<chunk>[^\r\n]+)|(?P<newline>\n|\r\n?)')
>
> - def __init__(self, fileobj, mode, zipinfo, decrypter=None):
> + def __init__(self, fileobj, mode, zipinfo, decrypter=None,
> + close_fileobj=False):
> self._fileobj = fileobj
> self._decrypter = decrypter
> + self._close_fileobj = close_fileobj
>
> self._compress_type = zipinfo.compress_type
> self._compress_size = zipinfo.compress_size
> @@ -647,6 +649,12 @@
> self._offset += len(data)
> return data
>
> + def close(self):
> + try:
> + if self._close_fileobj:
> + self._fileobj.close()
> + finally:
> + super().close()
>
>
> class ZipFile:
> @@ -889,8 +897,10 @@
> # given a file object in the constructor
> if self._filePassed:
> zef_file = self.fp
> + should_close = False
> else:
> zef_file = io.open(self.filename, 'rb')
> + should_close = True
>
> # Make sure we have an info object
> if isinstance(name, ZipInfo):
> @@ -944,7 +954,7 @@
> if h[11] != check_byte:
> raise RuntimeError("Bad password for file", name)
>
> - return ZipExtFile(zef_file, mode, zinfo, zd)
> + return ZipExtFile(zef_file, mode, zinfo, zd, close_fileobj=should_close)
>
> def extract(self, member, path=None, pwd=None):
> """Extract a member from the archive to the current working directory,
> _______________________________________________
> Python-checkins mailing list
> Python-checkins at python.org
> http://mail.python.org/mailman/listinfo/python-checkins
>
--
Regards,
Benjamin
More information about the Python-Dev
mailing list