Fix Git.{AutoInterrupt,CatFileContentStream} static typing by EliahKagan · Pull Request #2039 · gitpython-developers/GitPython

added 2 commits

June 7, 2025 11:35
This uses `TypeAlias` from the `typing` module, to make it so the
assignment statments introduced in gitpython-developers#2037 (to set `Git.AutoInterrupt`
and `Git.CatFileContentStream` to nonpublic module-level
implementations `_AutoInterrupt` and `_CatFileContentStream`) are
treated by `mypy` as type aliases rather than as class variables.

For details on the problem this partially fixes, see gitpython-developers#2038 and:
https://mypy.readthedocs.io/en/stable/common_issues.html#variables-vs-type-aliases

The fix won't work in this form, however, because it attempts to
import `TypeAlias` unconditionally from the standard-library
`typing` module, which only gained it in Python 3.10.
The standard library `typing` module introduced `TypeAlias` in
Python 3.10. This uses it from `typing_extensions` where neederd,
by making three changes:

- Change the version lower bound for `typing-extensions` from
  3.7.4.3 to 3.10.0.2, since 3.7.4.3 doesn't offer `TypeAlias`.

  (The reason not to go higher, to major version 4, is that
  it no longer supports versions of Python lower than 3.9, but
  we currently support Python 3.7 and Python 3.8.)

- Require the `typing-extensions` dependency when using Python
  versions lower than 3.10, rather than only lower than 3.7 as
  before.

- Conditionally import `TypeAlias` (in the `git.cmd` module) from
  either `typing` or `type_extensions` depending on the Python
  version, using a pattern that `mypy` and other type checkers
  recognize statically.

Together with the preceding commit, this fixes gitpython-developers#2038. (This is
approach (2) described there.)

This was referenced

Jun 7, 2025