grpc.aio.ServerInterceptor is incompatible with async RPC methods
Open
help wanted
stubs: false positive
- Dominant language
- Python
- Stars
- 5.1k
- Forks
- 2.1k
- Avg merge
- 1d 19h
- Merged PRs (30d)
- 82
Description
The grpc.aio.ServerInterceptor is currently annotated using grpc.RpcMethodHandler. However the interface for grpc.RpcMethodHandler is not compatible with async RPC methods. The correct stub for an async version would make use of Awaitable and AsyncIterator:
class RpcMethodHandler(abc.ABC, Generic[_TRequest, _TResponse]):
request_streaming: bool
response_streaming: bool
# XXX: not clear from docs whether this is optional or not
request_deserializer: _Deserializer[_TRequest] | None
# XXX: not clear from docs whether this is optional or not
response_serializer: _Serializer[_TResponse] | None
unary_unary: Callable[[_TRequest, ServicerContext], Awaitable[_TResponse]] | None
unary_stream: Callable[[_TRequest, ServicerContext], AsyncIterator[_TResponse]] | None
stream_unary: Callable[[Iterator[_TRequest], ServicerContext], Awaitable[_TResponse]] | None
stream_stream: Callable[[Iterator[_TRequest], ServicerContext], AsyncIterator[_TResponse]] | None
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Inspect stubs/grpcio/grpc/aio/init.pyi around lines 374-383 and compare the interceptor annotation with the async RpcMethodHandler shape described in the issue. Review open pull request #15497; done means the stub accepts async RPC methods using Awaitable and AsyncIterator without conflicting with the existing handler interface.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- api
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Clearly specified
- Newbie friendliness
- 25/100