python / python/typeshed

`tarfile.TarFile` has several missing overloads

オープン
#14,168 コメント 2 件 リアクション 1 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

help wanted stubs: false negative
主要言語
Python
スター
5.1k
フォーク
2.1k
平均マージ
1日 19時間
マージ済み PR(30日)
82

説明

Right now TarFile.__init__ is defined as: https://github.com/python/typeshed/blob/c7e29eccd9759411c0f46580e20727038668b320/stdlib/tarfile.pyi#L128-L132

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.

コントリビューションガイド

コントリビューションガイドを開く

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

調査の方向性

stdlib/tarfile.pyi の 128-132 行付近から始め、TarFile.init、open、taropen のシグネチャを確認してください。リンクされた playground の例を使って mypy で None/None の呼び出しを再現し、その後、overload が有効な name/fileobj の組み合わせを表していることを確認して、無効なケースを診断してください。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
python
領域
devtools
issue の種類
バグ
難易度
3/5
見積もり時間
1〜2日
活発さ
停滞
明瞭さ
おおむね明確
初心者へのやさしさ
48/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。