Skip to content

Commit a5348df

Browse files
committed
[grpcio] Type aio ServerInterceptor with an async method handler
1 parent c981c92 commit a5348df

2 files changed

Lines changed: 18 additions & 5 deletions

File tree

‎stubs/grpcio/@tests/test_cases/check_server_interceptor.py‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
import grpc
88
import grpc.aio
9+
from grpc.aio import _AsyncRpcMethodHandler
910

1011
RequestT = TypeVar("RequestT")
1112
ResponseT = TypeVar("ResponseT")
@@ -26,9 +27,9 @@ def intercept_service(
2627
class NoopAioInterceptor(grpc.aio.ServerInterceptor):
2728
async def intercept_service(
2829
self,
29-
continuation: Callable[[grpc.HandlerCallDetails], Awaitable[grpc.RpcMethodHandler[RequestT, ResponseT] | None]],
30+
continuation: Callable[[grpc.HandlerCallDetails], Awaitable[_AsyncRpcMethodHandler[RequestT, ResponseT] | None]],
3031
handler_call_details: grpc.HandlerCallDetails,
31-
) -> grpc.RpcMethodHandler[RequestT, ResponseT] | None:
32+
) -> _AsyncRpcMethodHandler[RequestT, ResponseT] | None:
3233
return await continuation(handler_call_details)
3334

3435

‎stubs/grpcio/grpc/aio/__init__.pyi‎

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ from grpc import (
2626
GenericRpcHandler,
2727
HandlerCallDetails,
2828
RpcError,
29-
RpcMethodHandler,
3029
ServerCredentials,
3130
Status,
3231
StatusCode,
@@ -437,6 +436,19 @@ class StreamStreamClientInterceptor(ClientInterceptor, metaclass=abc.ABCMeta):
437436

438437
# Server-Side Interceptor:
439438

439+
# Async version of grpc.RpcMethodHandler. As opposed to the former, this type
440+
# does not exist at runtime.
441+
@type_check_only
442+
class _AsyncRpcMethodHandler(Generic[_TRequest, _TResponse]):
443+
request_streaming: bool
444+
response_streaming: bool
445+
request_deserializer: _Deserializer[_TRequest] | None
446+
response_serializer: _Serializer[_TResponse] | None
447+
unary_unary: Callable[[_TRequest, ServicerContext[_TRequest, _TResponse]], Awaitable[_TResponse]] | None
448+
unary_stream: Callable[[_TRequest, ServicerContext[_TRequest, _TResponse]], AsyncIterator[_TResponse]] | None
449+
stream_unary: Callable[[AsyncIterator[_TRequest], ServicerContext[_TRequest, _TResponse]], Awaitable[_TResponse]] | None
450+
stream_stream: Callable[[AsyncIterator[_TRequest], ServicerContext[_TRequest, _TResponse]], AsyncIterator[_TResponse]] | None
451+
440452
class ServerInterceptor(metaclass=abc.ABCMeta):
441453
# This method (not the class) is generic over _TRequest and _TResponse
442454
# and the types must satisfy the no-op implementation of
@@ -447,9 +459,9 @@ class ServerInterceptor(metaclass=abc.ABCMeta):
447459
@abc.abstractmethod
448460
async def intercept_service(
449461
self,
450-
continuation: Callable[[HandlerCallDetails], Awaitable[RpcMethodHandler[_TRequest, _TResponse] | None]],
462+
continuation: Callable[[HandlerCallDetails], Awaitable[_AsyncRpcMethodHandler[_TRequest, _TResponse] | None]],
451463
handler_call_details: HandlerCallDetails,
452-
) -> RpcMethodHandler[_TRequest, _TResponse] | None: ...
464+
) -> _AsyncRpcMethodHandler[_TRequest, _TResponse] | None: ...
453465

454466
# Multi-Callable Interfaces:
455467

0 commit comments

Comments
 (0)