Skip to content

gh-59999: Add option to preserve permissions in ZipFile.extract #32289

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 40 commits into
base: main
Choose a base branch
from
Open
Changes from 1 commit
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
4fea41a
Add option to preserve permissions in ZipFile.extract
dignissimus Apr 3, 2022
f2f44ea
Update ACKS
dignissimus Apr 3, 2022
a09e5d3
Document option contents
dignissimus Apr 3, 2022
e2fa678
Document preserve_permissions parameter
dignissimus Apr 4, 2022
8a056b4
Continue work on tests
dignissimus Apr 5, 2022
a56d934
Fix tests
dignissimus Apr 12, 2022
06aff01
Skip tests on windows
dignissimus Apr 13, 2022
9a4b4f6
Add news entry
dignissimus Apr 13, 2022
5776f4c
Add tests for special file permissions
dignissimus Apr 13, 2022
8a3a778
Re-introduce tests for mode 0
dignissimus Apr 13, 2022
8a6a2c4
Use enumeration type in place of constants
dignissimus Apr 13, 2022
6470201
Document enumeration type
dignissimus Apr 13, 2022
5c8d82b
Check whether files were created on unix systems before extrating per…
dignissimus Apr 22, 2022
89da6f2
Remove trailing whitespace
dignissimus Apr 22, 2022
30e5528
Check file permissions against the umask
dignissimus Apr 24, 2022
5a1edac
Document that permissions are not preserved with archives created on …
dignissimus Apr 27, 2022
8a82294
Merge branch 'main' into bpo-15795
dignissimus Apr 27, 2022
41a350d
minor changes
merwok Feb 7, 2025
1b09aec
Merge branch 'main' into bpo-15795
dignissimus Feb 15, 2025
c456bb3
Qualify PreserveMode as zipfile.PreserveMode in documentation
dignissimus Feb 15, 2025
5616e0a
Revert PreserveMode -> zipfile.PreserveMode in documentation
dignissimus Feb 15, 2025
0065d2e
Replace dash with verb phrase in documentation for zipfile
dignissimus Feb 15, 2025
4064c32
Add versionchanged note in documentation for preserve_permissions in …
dignissimus Feb 15, 2025
f2c816a
Qualify ZipFile method references in documentation
dignissimus Feb 15, 2025
7d72b3b
Qualify zipfile.ZipFile.extract in news entry
dignissimus Feb 15, 2025
cb2478b
Disable tests that require root on wasi
dignissimus Feb 15, 2025
a082204
Disable tests that require file permissions on wasi
dignissimus Feb 15, 2025
fbba438
Move zipfile.PreserveMode description into docstring
dignissimus Feb 15, 2025
0d6b864
Remove superfluous newline
dignissimus Feb 15, 2025
b466493
Align method arguments in zipfile documentation
dignissimus Feb 15, 2025
9e94581
Separate clause with comma
dignissimus Feb 23, 2025
500ae2e
Documentation brevity
dignissimus Feb 23, 2025
a81a857
Merge branch 'main' into bpo-15795
dignissimus Feb 23, 2025
2cad611
Merge branch 'main' into bpo-15795
dignissimus Mar 4, 2025
5ef404a
Deduplicate Zipile path and pwd parameters
dignissimus Mar 4, 2025
c74c006
Separate permission-setting functionality from zipfile extraction code
dignissimus Mar 4, 2025
865771c
Merge branch 'main' into bpo-15795
dignissimus Mar 4, 2025
a2d7e77
Separate permission-setting functionality from zipfile extraction code
dignissimus Mar 5, 2025
44f5c89
Merge branch 'main' into bpo-15795
dignissimus Apr 13, 2025
9f5ebc3
Merge branch 'main' into bpo-15795
dignissimus Apr 13, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Document enumeration type
  • Loading branch information
dignissimus committed Apr 13, 2022
commit 6470201ce606af36ab2f9266bbb95791ea6a735b
22 changes: 11 additions & 11 deletions Doc/library/zipfile.rst
Original file line number Diff line number Diff line change
Expand Up @@ -120,22 +120,22 @@ The module defines the following items:
methods, and may either refuse to process the ZIP file altogether,
or fail to extract individual files.

.. data:: PERMS_PRESERVE_NONE
.. data:: PreserveMode.NONE

Constant for use in :meth:`extractall` and :meth:`extract` methods. Do not
preserve permissions of zipped files.

.. versionadded:: 3.11

.. data:: PERMS_PRESERVE_SAFE
.. data:: PreserveMode.SAFE

Constant for use in :meth:`extractall` and :meth:`extract` methods.
Preserve safe subset of permissions of the zipped files only: permissions
for reading, writing, execution for user, group and others.

.. versionadded:: 3.11

.. data:: PERMS_PRESERVE_ALL
.. data:: PreserveMode.ALL

Constant for use in :meth:`extractall` and :meth:`extract` methods.
Preserve all the permissions of the zipped files, including unsafe ones:
Expand Down Expand Up @@ -343,18 +343,18 @@ ZipFile Objects


.. method:: ZipFile.extract(member, path=None, pwd=None, \
preserve_permissions=zipfile.PERMS_PRESERVE_NONE)
preserve_permissions=zipfile.PreserveMode.NONE)

Extract a member from the archive to the current working directory; *member*
must be its full name or a :class:`ZipInfo` object. Its file information is
extracted as accurately as possible. *path* specifies a different directory
to extract to. *member* can be a filename or a :class:`ZipInfo` object.
*pwd* is the password used for encrypted files. *preserve_permissions*
controls how the permissions of zipped files are preserved. The default is
:data:`PERMS_PRESERVE_NONE` --- do not preserve any permissions. Other
:data:`PreserveMode.NONE` --- do not preserve any permissions. Other
options are to preserve a safe subset of permissions
(:data:`PERMS_PRESERVE_SAFE`) or all permissions
(:data:`PERMS_PRESERVE_ALL`).
(:data:`PreserveMode.SAFE`) or all permissions
(:data:`PreserveMode.ALL`).

Returns the normalized path created (a directory or new file).

Expand All @@ -377,16 +377,16 @@ ZipFile Objects


.. method:: ZipFile.extractall(path=None, members=None, pwd=None, \
preserve_permissions=zipfile.PERMS_PRESERVE_NONE)
preserve_permissions=zipfile.PreserveMode.NONE)

Extract all members from the archive to the current working directory. *path*
specifies a different directory to extract to. *members* is optional and must
be a subset of the list returned by :meth:`namelist`. *pwd* is the password
used for encrypted files. *preserve_permissions* controls how the permissions
of zipped files are preserved. The default is :data:`PERMS_PRESERVE_NONE`
of zipped files are preserved. The default is :data:`PreserveMode.NONE`
--- do not preserve any permissions. Other options are to preserve a safe
subset of permissions (:data:`PERMS_PRESERVE_SAFE`) or all permissions
(:data:`PERMS_PRESERVE_ALL`).
subset of permissions (:data:`PreserveMode.SAFE`) or all permissions
(:data:`PreserveMode.ALL`).


.. warning::
Expand Down