typing: add middleware protocols #2390
Open
+196
−27
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.
Summary of Changes
Typed the middleware classes with union of protocols.
Middleware class may conform to any protocol of the union to pass the type check
It's not perfect due the nature of python's static duck typing, but better than the plain
object
) Class may have correct signature forprocess_request()
, but wrong signature forprocess_response()
. It would be accepted sinceMiddlewareWithProcessRequest
says nothing about theprocess_response
.But if user explicitly states implemented protocols, then the typecheker will ensure strict conformance.
The protocols definitions are in the private
falcon._typing
module now. Should they be moved to the publicfalcon.typing
to support this usecase ?The protocols names are long and noisy. Use some abbreviations ?
Related Issues
#2372