python / python/typeshed

grpc.aio.ServerInterceptor is incompatible with async RPC methods

Open
#15,495 1 comment 0 reactions 0 assignees View on GitHub

@XiaXia009 is already working on this.

Since Mar 9, 2026.

  • #15497 by @XiaXia009 — 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

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.