Skip to content

Fix Git.{AutoInterrupt,CatFileContentStream} static typing #2039

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

Merged
merged 2 commits into from
Jun 7, 2025

Conversation

EliahKagan
Copy link
Member

@EliahKagan EliahKagan commented Jun 7, 2025

Fixes #2038

This fixes mypy for Git.AutoInterrupt and Git.CatFileContentStream. Static type checking of these was broken inadvertently in #2037, as described in #2038. This is approach (2) described in #2038. Further details are in that bug report and in the commit messages.

As in #2037, I've made sure this doesn't break Sphinx (though it would be very strange if it did), by checking locally as well as in the RTD cloud build. The entries in the latter can be examined: AutoInterrupt, CatFileContentStream.

Because CI runs mypy but does not verify its output, I'll wait to mark this non-draft until I've looked at all relevant jobs' mypy steps. (But this may be before the jobs complete, since the jobs that run mypy do so before running pytest, not after.)

Edit: All mypy results on CI look as they did before, and then new errors that came in with #2037 are gone.

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.)
@EliahKagan EliahKagan marked this pull request as ready for review June 7, 2025 16:21
@EliahKagan EliahKagan merged commit 5b098ff into gitpython-developers:main Jun 7, 2025
26 checks passed
@EliahKagan EliahKagan deleted the flatten-next branch June 7, 2025 16:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

Successfully merging this pull request may close these issues.

Git.{AutoInterrupt,CatFileContentStream} refactor broke static typing
1 participant