Spaces:
Paused
Paused
| # Copyright 2020 The gRPC Authors | |
| # | |
| # Licensed under the Apache License, Version 2.0 (the "License"); | |
| # you may not use this file except in compliance with the License. | |
| # You may obtain a copy of the License at | |
| # | |
| # http://www.apache.org/licenses/LICENSE-2.0 | |
| # | |
| # Unless required by applicable law or agreed to in writing, software | |
| # distributed under the License is distributed on an "AS IS" BASIS, | |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| # See the License for the specific language governing permissions and | |
| # limitations under the License. | |
| """Abstract base classes for Channel objects and Multicallable objects.""" | |
| import abc | |
| from typing import Generic, Optional | |
| import grpc | |
| from . import _base_call | |
| from ._typing import DeserializingFunction | |
| from ._typing import MetadataType | |
| from ._typing import RequestIterableType | |
| from ._typing import RequestType | |
| from ._typing import ResponseType | |
| from ._typing import SerializingFunction | |
| class UnaryUnaryMultiCallable(Generic[RequestType, ResponseType], abc.ABC): | |
| """Enables asynchronous invocation of a unary-call RPC.""" | |
| def __call__( | |
| self, | |
| request: RequestType, | |
| *, | |
| timeout: Optional[float] = None, | |
| metadata: Optional[MetadataType] = None, | |
| credentials: Optional[grpc.CallCredentials] = None, | |
| wait_for_ready: Optional[bool] = None, | |
| compression: Optional[grpc.Compression] = None, | |
| ) -> _base_call.UnaryUnaryCall[RequestType, ResponseType]: | |
| """Asynchronously invokes the underlying RPC. | |
| Args: | |
| request: The request value for the RPC. | |
| timeout: An optional duration of time in seconds to allow | |
| for the RPC. | |
| metadata: Optional :term:`metadata` to be transmitted to the | |
| service-side of the RPC. | |
| credentials: An optional CallCredentials for the RPC. Only valid for | |
| secure Channel. | |
| wait_for_ready: An optional flag to enable :term:`wait_for_ready` mechanism. | |
| compression: An element of grpc.compression, e.g. | |
| grpc.compression.Gzip. | |
| Returns: | |
| A UnaryUnaryCall object. | |
| Raises: | |
| RpcError: Indicates that the RPC terminated with non-OK status. The | |
| raised RpcError will also be a Call for the RPC affording the RPC's | |
| metadata, status code, and details. | |
| """ | |
| class UnaryStreamMultiCallable(Generic[RequestType, ResponseType], abc.ABC): | |
| """Enables asynchronous invocation of a server-streaming RPC.""" | |
| def __call__( | |
| self, | |
| request: RequestType, | |
| *, | |
| timeout: Optional[float] = None, | |
| metadata: Optional[MetadataType] = None, | |
| credentials: Optional[grpc.CallCredentials] = None, | |
| wait_for_ready: Optional[bool] = None, | |
| compression: Optional[grpc.Compression] = None, | |
| ) -> _base_call.UnaryStreamCall[RequestType, ResponseType]: | |
| """Asynchronously invokes the underlying RPC. | |
| Args: | |
| request: The request value for the RPC. | |
| timeout: An optional duration of time in seconds to allow | |
| for the RPC. | |
| metadata: Optional :term:`metadata` to be transmitted to the | |
| service-side of the RPC. | |
| credentials: An optional CallCredentials for the RPC. Only valid for | |
| secure Channel. | |
| wait_for_ready: An optional flag to enable :term:`wait_for_ready` mechanism. | |
| compression: An element of grpc.compression, e.g. | |
| grpc.compression.Gzip. | |
| Returns: | |
| A UnaryStreamCall object. | |
| Raises: | |
| RpcError: Indicates that the RPC terminated with non-OK status. The | |
| raised RpcError will also be a Call for the RPC affording the RPC's | |
| metadata, status code, and details. | |
| """ | |
| class StreamUnaryMultiCallable(abc.ABC): | |
| """Enables asynchronous invocation of a client-streaming RPC.""" | |
| def __call__( | |
| self, | |
| request_iterator: Optional[RequestIterableType] = None, | |
| timeout: Optional[float] = None, | |
| metadata: Optional[MetadataType] = None, | |
| credentials: Optional[grpc.CallCredentials] = None, | |
| wait_for_ready: Optional[bool] = None, | |
| compression: Optional[grpc.Compression] = None, | |
| ) -> _base_call.StreamUnaryCall: | |
| """Asynchronously invokes the underlying RPC. | |
| Args: | |
| request_iterator: An optional async iterable or iterable of request | |
| messages for the RPC. | |
| timeout: An optional duration of time in seconds to allow | |
| for the RPC. | |
| metadata: Optional :term:`metadata` to be transmitted to the | |
| service-side of the RPC. | |
| credentials: An optional CallCredentials for the RPC. Only valid for | |
| secure Channel. | |
| wait_for_ready: An optional flag to enable :term:`wait_for_ready` mechanism. | |
| compression: An element of grpc.compression, e.g. | |
| grpc.compression.Gzip. | |
| Returns: | |
| A StreamUnaryCall object. | |
| Raises: | |
| RpcError: Indicates that the RPC terminated with non-OK status. The | |
| raised RpcError will also be a Call for the RPC affording the RPC's | |
| metadata, status code, and details. | |
| """ | |
| class StreamStreamMultiCallable(abc.ABC): | |
| """Enables asynchronous invocation of a bidirectional-streaming RPC.""" | |
| def __call__( | |
| self, | |
| request_iterator: Optional[RequestIterableType] = None, | |
| timeout: Optional[float] = None, | |
| metadata: Optional[MetadataType] = None, | |
| credentials: Optional[grpc.CallCredentials] = None, | |
| wait_for_ready: Optional[bool] = None, | |
| compression: Optional[grpc.Compression] = None, | |
| ) -> _base_call.StreamStreamCall: | |
| """Asynchronously invokes the underlying RPC. | |
| Args: | |
| request_iterator: An optional async iterable or iterable of request | |
| messages for the RPC. | |
| timeout: An optional duration of time in seconds to allow | |
| for the RPC. | |
| metadata: Optional :term:`metadata` to be transmitted to the | |
| service-side of the RPC. | |
| credentials: An optional CallCredentials for the RPC. Only valid for | |
| secure Channel. | |
| wait_for_ready: An optional flag to enable :term:`wait_for_ready` mechanism. | |
| compression: An element of grpc.compression, e.g. | |
| grpc.compression.Gzip. | |
| Returns: | |
| A StreamStreamCall object. | |
| Raises: | |
| RpcError: Indicates that the RPC terminated with non-OK status. The | |
| raised RpcError will also be a Call for the RPC affording the RPC's | |
| metadata, status code, and details. | |
| """ | |
| class Channel(abc.ABC): | |
| """Enables asynchronous RPC invocation as a client. | |
| Channel objects implement the Asynchronous Context Manager (aka. async | |
| with) type, although they are not supportted to be entered and exited | |
| multiple times. | |
| """ | |
| async def __aenter__(self): | |
| """Starts an asynchronous context manager. | |
| Returns: | |
| Channel the channel that was instantiated. | |
| """ | |
| async def __aexit__(self, exc_type, exc_val, exc_tb): | |
| """Finishes the asynchronous context manager by closing the channel. | |
| Still active RPCs will be cancelled. | |
| """ | |
| async def close(self, grace: Optional[float] = None): | |
| """Closes this Channel and releases all resources held by it. | |
| This method immediately stops the channel from executing new RPCs in | |
| all cases. | |
| If a grace period is specified, this method waits until all active | |
| RPCs are finished or until the grace period is reached. RPCs that haven't | |
| been terminated within the grace period are aborted. | |
| If a grace period is not specified (by passing None for grace), | |
| all existing RPCs are cancelled immediately. | |
| This method is idempotent. | |
| """ | |
| def get_state( | |
| self, try_to_connect: bool = False | |
| ) -> grpc.ChannelConnectivity: | |
| """Checks the connectivity state of a channel. | |
| This is an EXPERIMENTAL API. | |
| If the channel reaches a stable connectivity state, it is guaranteed | |
| that the return value of this function will eventually converge to that | |
| state. | |
| Args: | |
| try_to_connect: a bool indicate whether the Channel should try to | |
| connect to peer or not. | |
| Returns: A ChannelConnectivity object. | |
| """ | |
| async def wait_for_state_change( | |
| self, | |
| last_observed_state: grpc.ChannelConnectivity, | |
| ) -> None: | |
| """Waits for a change in connectivity state. | |
| This is an EXPERIMENTAL API. | |
| The function blocks until there is a change in the channel connectivity | |
| state from the "last_observed_state". If the state is already | |
| different, this function will return immediately. | |
| There is an inherent race between the invocation of | |
| "Channel.wait_for_state_change" and "Channel.get_state". The state can | |
| change arbitrary many times during the race, so there is no way to | |
| observe every state transition. | |
| If there is a need to put a timeout for this function, please refer to | |
| "asyncio.wait_for". | |
| Args: | |
| last_observed_state: A grpc.ChannelConnectivity object representing | |
| the last known state. | |
| """ | |
| async def channel_ready(self) -> None: | |
| """Creates a coroutine that blocks until the Channel is READY.""" | |
| def unary_unary( | |
| self, | |
| method: str, | |
| request_serializer: Optional[SerializingFunction] = None, | |
| response_deserializer: Optional[DeserializingFunction] = None, | |
| _registered_method: Optional[bool] = False, | |
| ) -> UnaryUnaryMultiCallable: | |
| """Creates a UnaryUnaryMultiCallable for a unary-unary method. | |
| Args: | |
| method: The name of the RPC method. | |
| request_serializer: Optional :term:`serializer` for serializing the request | |
| message. Request goes unserialized in case None is passed. | |
| response_deserializer: Optional :term:`deserializer` for deserializing the | |
| response message. Response goes undeserialized in case None | |
| is passed. | |
| _registered_method: Implementation Private. Optional: A bool representing | |
| whether the method is registered. | |
| Returns: | |
| A UnaryUnaryMultiCallable value for the named unary-unary method. | |
| """ | |
| def unary_stream( | |
| self, | |
| method: str, | |
| request_serializer: Optional[SerializingFunction] = None, | |
| response_deserializer: Optional[DeserializingFunction] = None, | |
| _registered_method: Optional[bool] = False, | |
| ) -> UnaryStreamMultiCallable: | |
| """Creates a UnaryStreamMultiCallable for a unary-stream method. | |
| Args: | |
| method: The name of the RPC method. | |
| request_serializer: Optional :term:`serializer` for serializing the request | |
| message. Request goes unserialized in case None is passed. | |
| response_deserializer: Optional :term:`deserializer` for deserializing the | |
| response message. Response goes undeserialized in case None | |
| is passed. | |
| _registered_method: Implementation Private. Optional: A bool representing | |
| whether the method is registered. | |
| Returns: | |
| A UnarySteramMultiCallable value for the named unary-stream method. | |
| """ | |
| def stream_unary( | |
| self, | |
| method: str, | |
| request_serializer: Optional[SerializingFunction] = None, | |
| response_deserializer: Optional[DeserializingFunction] = None, | |
| _registered_method: Optional[bool] = False, | |
| ) -> StreamUnaryMultiCallable: | |
| """Creates a StreamUnaryMultiCallable for a stream-unary method. | |
| Args: | |
| method: The name of the RPC method. | |
| request_serializer: Optional :term:`serializer` for serializing the request | |
| message. Request goes unserialized in case None is passed. | |
| response_deserializer: Optional :term:`deserializer` for deserializing the | |
| response message. Response goes undeserialized in case None | |
| is passed. | |
| _registered_method: Implementation Private. Optional: A bool representing | |
| whether the method is registered. | |
| Returns: | |
| A StreamUnaryMultiCallable value for the named stream-unary method. | |
| """ | |
| def stream_stream( | |
| self, | |
| method: str, | |
| request_serializer: Optional[SerializingFunction] = None, | |
| response_deserializer: Optional[DeserializingFunction] = None, | |
| _registered_method: Optional[bool] = False, | |
| ) -> StreamStreamMultiCallable: | |
| """Creates a StreamStreamMultiCallable for a stream-stream method. | |
| Args: | |
| method: The name of the RPC method. | |
| request_serializer: Optional :term:`serializer` for serializing the request | |
| message. Request goes unserialized in case None is passed. | |
| response_deserializer: Optional :term:`deserializer` for deserializing the | |
| response message. Response goes undeserialized in case None | |
| is passed. | |
| _registered_method: Implementation Private. Optional: A bool representing | |
| whether the method is registered. | |
| Returns: | |
| A StreamStreamMultiCallable value for the named stream-stream method. | |
| """ | |