Adding upstream version 1.2+20240521.
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
6b2864e4b9
commit
8512f66c5a
229 changed files with 19561 additions and 0 deletions
33
src/aristaproto/grpc/grpclib_server.py
Normal file
33
src/aristaproto/grpc/grpclib_server.py
Normal file
|
@ -0,0 +1,33 @@
|
|||
from abc import ABC
|
||||
from collections.abc import AsyncIterable
|
||||
from typing import (
|
||||
Any,
|
||||
Callable,
|
||||
Dict,
|
||||
)
|
||||
|
||||
import grpclib
|
||||
import grpclib.server
|
||||
|
||||
|
||||
class ServiceBase(ABC):
|
||||
"""
|
||||
Base class for async gRPC servers.
|
||||
"""
|
||||
|
||||
async def _call_rpc_handler_server_stream(
|
||||
self,
|
||||
handler: Callable,
|
||||
stream: grpclib.server.Stream,
|
||||
request: Any,
|
||||
) -> None:
|
||||
response_iter = handler(request)
|
||||
# check if response is actually an AsyncIterator
|
||||
# this might be false if the method just returns without
|
||||
# yielding at least once
|
||||
# in that case, we just interpret it as an empty iterator
|
||||
if isinstance(response_iter, AsyncIterable):
|
||||
async for response_message in response_iter:
|
||||
await stream.send_message(response_message)
|
||||
else:
|
||||
response_iter.close()
|
Loading…
Add table
Add a link
Reference in a new issue