Added type annotation to public classes. #1074
Draft
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.
Changes
Adds type annotation to public classes, and
py.typed
so that client code can type check against this library.Fixes #980 (kind of)
Note that the issue in question seems to be more ambitious in that it aims to provide type information to the entire library:
This PR only aims to solve the latter.
Per providing type annotations, there are several ways to distribute type information:
This is the first option, and makes changes to
.py
files mostly just adding type annotations. If you prefer to go with the second option (which doesn't touch any.py
file), please have a look at #1075 instead.Details about this PR:
from __future__ import annotations
x | None
instead ofOptional[x]
x | y
instead ofUnion[x, y]
list[x]
/set[x]
/dict[x, y]
instead oftyping.List[x]
/typing.Set[x]
/typing.Dict[x, y]
list
, but varargs/default value istuple
None
Note that this is introducing a breaking change that may affect a small minority of users. The key/value serializer/deserializer functions no longer optional (with the identity function defined as the default parameter). This is so that the generic parameters
KT
/VT
can be inferred.This means that:
None
as their key/value serializer/deserializer function, there should be no change.However, if a client is explicitly passing in
None
, e.g., withAIOKafkaConsumer
:Or with
AIOKafkaProducer
:The type checker will reject it.
You can ignore the type checker though, and the application should work the same as before, as this PR does not change any runtime logic.
Checklist
CHANGES
folder<issue_id>.<type>
(e.g.588.bugfix
)issue_id
change it to the pr id after creating the PR.feature
: Signifying a new feature..bugfix
: Signifying a bug fix..doc
: Signifying a documentation improvement..removal
: Signifying a deprecation or removal of public API..misc
: A ticket has been closed, but it is not of interest to users.Fix issue with non-ascii contents in doctest text files.