8000 Add name and mode attributes to compressed file-like objects · Issue #115961 · python/cpython · GitHub
[go: up one dir, main page]

Skip to content

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

@serhiy-storchaka

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:

< 8000 ul dir="auto">
  • if (name is None and hasattr(fileobj, "name") and
  • if hasattr(fileobj, "mode"):
  • if 'b' not in getattr(file, 'mode', 'b'):
  • mode = getattr(fileobj, 'mode', 'rb')
  • if 'b' not in getattr(file, 'mode', 'b'):
  • if hasattr(f, 'mode'):
  • 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

    Metadata

    Metadata

    Labels

    type-featureA feature request or enhancement

    Projects

    Status

    Done

    Status

    Done

    Status

    Done

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      0