[issue22201] python -mzipfile fails to unzip files with folders created by zip

2014-08-17 Thread Roundup Robot

Roundup Robot added the comment:

New changeset ffa5bfe75c3a by Serhiy Storchaka in branch '2.7':
Issue #22201: Command-line interface of the zipfile module now correctly
http://hg.python.org/cpython/rev/ffa5bfe75c3a

New changeset 7b933005c492 by Serhiy Storchaka in branch '3.4':
Issue #22201: Command-line interface of the zipfile module now correctly
http://hg.python.org/cpython/rev/7b933005c492

New changeset dc77ad3a17aa by Serhiy Storchaka in branch 'default':
Issue #22201: Command-line interface of the zipfile module now correctly
http://hg.python.org/cpython/rev/dc77ad3a17aa

--
nosy: +python-dev

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue22201
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue22201] python -mzipfile fails to unzip files with folders created by zip

2014-08-17 Thread Serhiy Storchaka

Serhiy Storchaka added the comment:

Applied first part of the patch. Thank you Ryan. For the rest please open 
separate issue.

--
resolution:  - fixed
stage: patch review - resolved
status: open - closed

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue22201
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue22201] python -mzipfile fails to unzip files with folders created by zip

2014-08-16 Thread Ryan Wilson

Ryan Wilson added the comment:

The reason behind this was that zipfile.py currently handles empty directories 
in zipfiles incorrectly.

On lines 1774 - 1778 in Lib/zipfile.py:

tgtdir = os.path.dirname(tgt)
if not os.path.exists(tgtdir):
os.makedirs(tgtdir)
with open(tgt, 'wb') as fp:
fp.write(zf.read(path))

In the case described above, tgt is 'dest/foo/' because the directory is empty. 
For non-empty directories, tgt would be a file in the directory i.e. 
'dest/foo/a'. In the empty directory case, the directory will be created, but 
then opened as file (which will throw the error shown above).

When compressing the file with 'python -mzipfile -c', zipfile.py would not add 
empty directories to the zipfile. Hence, the zip file generated is empty.

This patch fixes both issues. In the decompression case, I utilize the 
Zipfile.extractall() function instead of extracting each file manually. The 
extractall() function handles empty directories correctly. For the compression 
case, I added a check to add an empty directory to the zip file.

--
keywords: +patch
nosy: +ryantimwilson
versions:  -Python 3.5
Added file: http://bugs.python.org/file36389/fix_zipfile_empty_dir.patch

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue22201
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue22201] python -mzipfile fails to unzip files with folders created by zip

2014-08-16 Thread Serhiy Storchaka

Changes by Serhiy Storchaka storch...@gmail.com:


--
assignee:  - serhiy.storchaka
nosy: +serhiy.storchaka
stage:  - patch review
type:  - behavior
versions: +Python 2.7, Python 3.5

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue22201
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue22201] python -mzipfile fails to unzip files with folders created by zip

2014-08-14 Thread Antony Lee

New submission from Antony Lee:

With Python 3.4.1:

$ mkdir foo; zip -r foo{,}; python -mzipfile -e foo.zip dest
  adding: foo/ (stored 0%)
Traceback (most recent call last):
  File /usr/lib/python3.4/runpy.py, line 170, in _run_module_as_main
__main__, mod_spec)
  File /usr/lib/python3.4/runpy.py, line 85, in _run_code
exec(code, run_globals)
  File /usr/lib/python3.4/zipfile.py, line 1799, in module
main()
  File /usr/lib/python3.4/zipfile.py, line 1777, in main
with open(tgt, 'wb') as fp:
IsADirectoryError: [Errno 21] Is a directory: 'dest/foo/'

Note that zipfile is actually able to unzip the file:

$ python -c 'from zipfile import *; ZipFile(foo.zip).extractall(dest)'

works fine.

If the zip file is created by python -mzipfile -c foo.zip foo then there is 
no problem.  Likewise, if there are no folders in the zip file (but just a 
collection of files) then there is no problem.

--
components: Library (Lib)
messages: 225325
nosy: Antony.Lee
priority: normal
severity: normal
status: open
title: python -mzipfile fails to unzip files with folders created by zip
versions: Python 3.4, Python 3.5

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue22201
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com