GeezerVison is showing github.com — Fix Git.{AutoInterrupt,CatFileContentStream} static typing by EliahKagan · Pull Request #2039 · gitpython-developers/GitPython
Conversation
EliahKagan
commented
Jun 7, 2025
•
edited
Loading
Uh oh!
There was an error while loading. Please reload this page.
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 the new errors that came in with #2037 are gone.
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
Byron reacted with heart emoji
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
Uh oh!
There was an error while loading. Please reload this page.
Assignees
No one assigned
Milestone
No milestone
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
|