Skip to content

Commit 2626c88

Browse files
committed
Fix grpc aio handler typing
1 parent a1c4ca3 commit 2626c88

2 files changed

Lines changed: 38 additions & 5 deletions

File tree

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

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
from __future__ import annotations
22

3-
from collections.abc import Callable
3+
from collections.abc import AsyncIterator, Callable
44
from concurrent.futures.thread import ThreadPoolExecutor
5-
from typing import Awaitable, TypeVar
5+
from typing import Awaitable, TypeVar, cast
66

77
import grpc
88
import grpc.aio
@@ -26,10 +26,28 @@ def intercept_service(
2626
class NoopAioInterceptor(grpc.aio.ServerInterceptor):
2727
async def intercept_service(
2828
self,
29-
continuation: Callable[[grpc.HandlerCallDetails], Awaitable[grpc.RpcMethodHandler[RequestT, ResponseT]]],
29+
continuation: Callable[[grpc.HandlerCallDetails], Awaitable[grpc.aio.RpcMethodHandler[RequestT, ResponseT]]],
3030
handler_call_details: grpc.HandlerCallDetails,
31-
) -> grpc.RpcMethodHandler[RequestT, ResponseT]:
31+
) -> grpc.aio.RpcMethodHandler[RequestT, ResponseT]:
3232
return await continuation(handler_call_details)
3333

3434

3535
grpc.aio.server(interceptors=[NoopAioInterceptor()])
36+
37+
aio_handler = grpc.aio.RpcMethodHandler[RequestT, ResponseT]()
38+
aio_handler.unary_unary = cast(
39+
Callable[[RequestT, grpc.aio.ServicerContext[RequestT, ResponseT]], Awaitable[ResponseT]],
40+
None,
41+
)
42+
aio_handler.unary_stream = cast(
43+
Callable[[RequestT, grpc.aio.ServicerContext[RequestT, ResponseT]], AsyncIterator[ResponseT]],
44+
None,
45+
)
46+
aio_handler.stream_unary = cast(
47+
Callable[[AsyncIterator[RequestT], grpc.aio.ServicerContext[RequestT, ResponseT]], Awaitable[ResponseT]],
48+
None,
49+
)
50+
aio_handler.stream_stream = cast(
51+
Callable[[AsyncIterator[RequestT], grpc.aio.ServicerContext[RequestT, ResponseT]], AsyncIterator[ResponseT]],
52+
None,
53+
)

stubs/grpcio/grpc/aio/__init__.pyi

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ from grpc import (
1515
GenericRpcHandler,
1616
HandlerCallDetails,
1717
RpcError,
18-
RpcMethodHandler,
1918
ServerCredentials,
2019
StatusCode,
2120
_Options,
@@ -369,6 +368,22 @@ class StreamStreamClientInterceptor(ClientInterceptor, metaclass=abc.ABCMeta):
369368
request_iterator: AsyncIterable[_TRequest] | Iterable[_TRequest],
370369
) -> AsyncIterator[_TResponse] | StreamStreamCall[_TRequest, _TResponse]: ...
371370

371+
# Service-Side Handler:
372+
373+
class RpcMethodHandler(Generic[_TRequest, _TResponse], metaclass=abc.ABCMeta):
374+
request_streaming: bool
375+
response_streaming: bool
376+
377+
request_deserializer: _Deserializer[_TRequest] | None
378+
response_serializer: _Serializer[_TResponse] | None
379+
380+
unary_unary: Callable[[_TRequest, ServicerContext[_TRequest, _TResponse]], Awaitable[_TResponse]] | None
381+
unary_stream: Callable[[_TRequest, ServicerContext[_TRequest, _TResponse]], AsyncIterator[_TResponse]] | None
382+
stream_unary: Callable[[AsyncIterator[_TRequest], ServicerContext[_TRequest, _TResponse]], Awaitable[_TResponse]] | None
383+
stream_stream: Callable[
384+
[AsyncIterator[_TRequest], ServicerContext[_TRequest, _TResponse]], AsyncIterator[_TResponse]
385+
] | None
386+
372387
# Server-Side Interceptor:
373388

374389
class ServerInterceptor(metaclass=abc.ABCMeta):

0 commit comments

Comments
 (0)