Skip to content

tarfile.TarFile has several missing overloads #14168

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
sobolevn opened this issue May 27, 2025 · 2 comments · May be fixed by #14172
Open

tarfile.TarFile has several missing overloads #14168

sobolevn opened this issue May 27, 2025 · 2 comments · May be fixed by #14172
Labels
help wanted An actionable problem of low to medium complexity where a PR would be very welcome stubs: false negative Type checkers do not report an error, but should

Comments

@sobolevn
Copy link
Member

Right now TarFile.__init__ is defined as:

typeshed/stdlib/tarfile.pyi

Lines 128 to 132 in c7e29ec

def __init__(
self,
name: StrOrBytesPath | None = None,
mode: Literal["r", "a", "w", "x"] = "r",
fileobj: _Fileobj | None = None,

Which is not exactly right, because there's a case when name and fileobj are both None at the same time. And this will lead to runtime errors:

>>> import tarfile
>>> tarfile.TarFile(None, fileobj=None)
Traceback (most recent call last):
  File "<python-input-2>", line 1, in <module>
    tarfile.TarFile(None, fileobj=None)
    ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^
  File "/Users/sobolev/Desktop/cpython/Lib/tarfile.py", line 1729, in __init__
    fileobj = bltn_open(name, self._mode)
TypeError: expected str, bytes or os.PathLike object, not NoneType

Right now mypy does not raise any errors for this broken case: https://mypy-play.net/?mypy=latest&python=3.12&gist=7452d274249fafba1f8a16565d5486c6

We need either name or fileobj, they can be both None at the same time. So, we need to add overloads.

There are several other methods that needs to be updated like open and taropen, maybe others.

@sobolevn sobolevn added stubs: false negative Type checkers do not report an error, but should help wanted An actionable problem of low to medium complexity where a PR would be very welcome labels May 27, 2025
@alexeev-prog
Copy link

I can try fix this.

ashm-dev added a commit to ashm-dev/typeshed that referenced this issue May 27, 2025
… case

Add proper overloads to TarFile.__init__, open, taropen, gzopen, bz2open, and xzopen
to ensure that at least one of `name` or `fileobj` parameters is not None.
This prevents mypy from accepting invalid calls like `tarfile.TarFile(None, fileobj=None)`
which would cause runtime errors.

Fixes python#14168
ashm-dev added a commit to ashm-dev/typeshed that referenced this issue May 27, 2025
… case

Add proper overloads to TarFile.__init__, open, taropen, gzopen, bz2open, and xzopen
to ensure that at least one of `name` or `fileobj` parameters is not None.
This prevents mypy from accepting invalid calls like `tarfile.TarFile(None, fileobj=None)`
which would cause runtime errors.

Fixes python#14168
ashm-dev added a commit to ashm-dev/typeshed that referenced this issue May 27, 2025
… case

Add proper overloads to TarFile.__init__, open, taropen, gzopen, bz2open, and xzopen
to ensure that at least one of `name` or `fileobj` parameters is not None.
This prevents mypy from accepting invalid calls like `tarfile.TarFile(None, fileobj=None)`
which would cause runtime errors.

Fixes python#14168
ashm-dev added a commit to ashm-dev/typeshed that referenced this issue May 27, 2025
… case

Add proper overloads to TarFile.__init__, open, taropen, gzopen, bz2open, and xzopen
to ensure that at least one of `name` or `fileobj` parameters is not None.
This prevents mypy from accepting invalid calls like `tarfile.TarFile(None, fileobj=None)`
which would cause runtime errors.

Fixes python#14168
@alexeev-prog
Copy link

I work with this in this PR

@alexeev-prog alexeev-prog linked a pull request May 29, 2025 that will close this issue
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
help wanted An actionable problem of low to medium complexity where a PR would be very welcome stubs: false negative Type checkers do not report an error, but should
Projects
None yet
2 participants