Skip to content

Add name and mode attributes to compressed file-like objects #115961

Closed

Description

@serhiy-storchaka

Feature or enhancement

Regular file objects returned by the open() building have name and name and mode attributes. Some code may use these optional attributes for different purposes, for example to distinguish readable files from writable files, binary files from text files, or just for formatting the repr or error messages. For example:

There are several file-like objects in compressing modules gzip, bz2 and lama and archiving modules zipfile and tarfile. They usually implement the raw or buffered file protocols from io, but not always have name and mode attributes, and when they have, they not always have common semantic.

GzipFile, unlike to BZ2File and LZMAFile, has name and mode attributes, but mode is an integer, that confuses tarfile (see #62775).

ZipExtFile has the mode attribute which is always 'r'. It is a legacy from Python 2, when it could also be 'U' or 'rU' for files with universal newlines. But this mode was removed long time ago, and since it is a binary file, its mode should be 'rb'.

See also #68446, #91373, #91374. I opened this issue because consider it all the parts of larger image.

Linked PRs

Activity

  1. added a commit that references this issue on Feb 26, 2024
  2. serhiy-storchaka commented on Feb 26, 2024

    @serhiy-storchaka
    MemberAuthor

    The first step is to add tests for existing attributes and methods for file-like objects created in different way, in different modes and states: #115963. It also fixes some bugs in tests.

  3. added a commit that references this issue on Feb 28, 2024
  4. added a commit that references this issue on Feb 28, 2024
  5. added a commit that references this issue on Feb 28, 2024
  6. serhiy-storchaka commented on Feb 28, 2024

    @serhiy-storchaka
    MemberAuthor

    And the second step -- add new attributes and change the existing attributes to match the general rule.

    It includes two minor breaking changes:

    • GzipFile.mode is now 'rb' or 'wb' instead of 1 or 2.
    • ZipExtFile.mode is now 'rb' instead of 'r'.

    These changes look rather as bugfixes (see #62775), but I do not think that it is worth to backport them.

  7. added 4 commits that reference this issue on Feb 28, 2024
  8. added a commit that references this issue on Mar 4, 2024
  9. serhiy-storchaka commented on Mar 13, 2024

    @serhiy-storchaka
    MemberAuthor

    Open questions:

    • Should name be available for closed streams? Currently it is available for gzip, but for bz2 and lzma it raises a ValueError.
    • Should mode be always "wb" for writable streams, or let it be "ab" or "xb" if the stream was opened with the corresponding mode argument?
  10. added a commit that references this issue on Mar 25, 2024
  11. added a commit that references this issue on Apr 17, 2024
  12. added a commit that references this issue on Apr 21, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

type-featureA feature request or enhancement

Projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions