Improve kwargs typing in callbacks protocols #720
Merged
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.
In #704, callbacks were properly defined, but this required MyPy extensions (to be released in Python & typing_extensions on Python 3.10 release, presumably Oct'2021). The existence of these extensions required a conditional to avoid installing them at runtime (where they are not needed). Thus, in turn, required quoting (ForwardRef'ing) all references to callbacks.
As a result, this broke IDE navigation, as PyCharm does not understand "quoted" types.
To fix that, a little improvement is added: for runtime, define the same callback protocols, but with no arguments specified — make them just callables. This allows us to unquote the callback types and to use them both at runtime and type-checking time naturally.
In addition, clarify the types of some kwargs and export their same-named types from the root package. Specifically, the labels/annotations are read-only mappings (not necessary dicts),
stopped
can be sync or async, and body essences (old
&new
mostly) are not necessary mutable.