diff options
| author | nkozlovskiy <[email protected]> | 2023-09-29 12:24:06 +0300 | 
|---|---|---|
| committer | nkozlovskiy <[email protected]> | 2023-09-29 12:41:34 +0300 | 
| commit | e0e3e1717e3d33762ce61950504f9637a6e669ed (patch) | |
| tree | bca3ff6939b10ed60c3d5c12439963a1146b9711 /contrib/python/grpcio/py3/grpc/framework/interfaces/face | |
| parent | 38f2c5852db84c7b4d83adfcb009eb61541d1ccd (diff) | |
add ydb deps
Diffstat (limited to 'contrib/python/grpcio/py3/grpc/framework/interfaces/face')
3 files changed, 1230 insertions, 0 deletions
diff --git a/contrib/python/grpcio/py3/grpc/framework/interfaces/face/__init__.py b/contrib/python/grpcio/py3/grpc/framework/interfaces/face/__init__.py new file mode 100644 index 00000000000..5fb4f3c3cfd --- /dev/null +++ b/contrib/python/grpcio/py3/grpc/framework/interfaces/face/__init__.py @@ -0,0 +1,13 @@ +# Copyright 2015 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. diff --git a/contrib/python/grpcio/py3/grpc/framework/interfaces/face/face.py b/contrib/python/grpcio/py3/grpc/framework/interfaces/face/face.py new file mode 100644 index 00000000000..ed0de6a7de2 --- /dev/null +++ b/contrib/python/grpcio/py3/grpc/framework/interfaces/face/face.py @@ -0,0 +1,1049 @@ +# Copyright 2015 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. +"""Interfaces defining the Face layer of RPC Framework.""" + +import abc +import collections +import enum + +# cardinality, style, abandonment, future, and stream are +# referenced from specification in this module. +from grpc.framework.common import cardinality  # pylint: disable=unused-import +from grpc.framework.common import style  # pylint: disable=unused-import +from grpc.framework.foundation import future  # pylint: disable=unused-import +from grpc.framework.foundation import stream  # pylint: disable=unused-import + +# pylint: disable=too-many-arguments + + +class NoSuchMethodError(Exception): +    """Raised by customer code to indicate an unrecognized method. + +  Attributes: +    group: The group of the unrecognized method. +    name: The name of the unrecognized method. +  """ + +    def __init__(self, group, method): +        """Constructor. + +    Args: +      group: The group identifier of the unrecognized RPC name. +      method: The method identifier of the unrecognized RPC name. +    """ +        super(NoSuchMethodError, self).__init__() +        self.group = group +        self.method = method + +    def __repr__(self): +        return 'face.NoSuchMethodError(%s, %s)' % ( +            self.group, +            self.method, +        ) + + +class Abortion( +        collections.namedtuple('Abortion', ( +            'kind', +            'initial_metadata', +            'terminal_metadata', +            'code', +            'details', +        ))): +    """A value describing RPC abortion. + +  Attributes: +    kind: A Kind value identifying how the RPC failed. +    initial_metadata: The initial metadata from the other side of the RPC or +      None if no initial metadata value was received. +    terminal_metadata: The terminal metadata from the other side of the RPC or +      None if no terminal metadata value was received. +    code: The code value from the other side of the RPC or None if no code value +      was received. +    details: The details value from the other side of the RPC or None if no +      details value was received. +  """ + +    @enum.unique +    class Kind(enum.Enum): +        """Types of RPC abortion.""" + +        CANCELLED = 'cancelled' +        EXPIRED = 'expired' +        LOCAL_SHUTDOWN = 'local shutdown' +        REMOTE_SHUTDOWN = 'remote shutdown' +        NETWORK_FAILURE = 'network failure' +        LOCAL_FAILURE = 'local failure' +        REMOTE_FAILURE = 'remote failure' + + +class AbortionError(Exception, metaclass=abc.ABCMeta): +    """Common super type for exceptions indicating RPC abortion. + +    initial_metadata: The initial metadata from the other side of the RPC or +      None if no initial metadata value was received. +    terminal_metadata: The terminal metadata from the other side of the RPC or +      None if no terminal metadata value was received. +    code: The code value from the other side of the RPC or None if no code value +      was received. +    details: The details value from the other side of the RPC or None if no +      details value was received. +  """ + +    def __init__(self, initial_metadata, terminal_metadata, code, details): +        super(AbortionError, self).__init__() +        self.initial_metadata = initial_metadata +        self.terminal_metadata = terminal_metadata +        self.code = code +        self.details = details + +    def __str__(self): +        return '%s(code=%s, details="%s")' % (self.__class__.__name__, +                                              self.code, self.details) + + +class CancellationError(AbortionError): +    """Indicates that an RPC has been cancelled.""" + + +class ExpirationError(AbortionError): +    """Indicates that an RPC has expired ("timed out").""" + + +class LocalShutdownError(AbortionError): +    """Indicates that an RPC has terminated due to local shutdown of RPCs.""" + + +class RemoteShutdownError(AbortionError): +    """Indicates that an RPC has terminated due to remote shutdown of RPCs.""" + + +class NetworkError(AbortionError): +    """Indicates that some error occurred on the network.""" + + +class LocalError(AbortionError): +    """Indicates that an RPC has terminated due to a local defect.""" + + +class RemoteError(AbortionError): +    """Indicates that an RPC has terminated due to a remote defect.""" + + +class RpcContext(abc.ABC): +    """Provides RPC-related information and action.""" + +    @abc.abstractmethod +    def is_active(self): +        """Describes whether the RPC is active or has terminated.""" +        raise NotImplementedError() + +    @abc.abstractmethod +    def time_remaining(self): +        """Describes the length of allowed time remaining for the RPC. + +    Returns: +      A nonnegative float indicating the length of allowed time in seconds +      remaining for the RPC to complete before it is considered to have timed +      out. +    """ +        raise NotImplementedError() + +    @abc.abstractmethod +    def add_abortion_callback(self, abortion_callback): +        """Registers a callback to be called if the RPC is aborted. + +    Args: +      abortion_callback: A callable to be called and passed an Abortion value +        in the event of RPC abortion. +    """ +        raise NotImplementedError() + +    @abc.abstractmethod +    def cancel(self): +        """Cancels the RPC. + +    Idempotent and has no effect if the RPC has already terminated. +    """ +        raise NotImplementedError() + +    @abc.abstractmethod +    def protocol_context(self): +        """Accesses a custom object specified by an implementation provider. + +    Returns: +      A value specified by the provider of a Face interface implementation +        affording custom state and behavior. +    """ +        raise NotImplementedError() + + +class Call(RpcContext, metaclass=abc.ABCMeta): +    """Invocation-side utility object for an RPC.""" + +    @abc.abstractmethod +    def initial_metadata(self): +        """Accesses the initial metadata from the service-side of the RPC. + +    This method blocks until the value is available or is known not to have been +    emitted from the service-side of the RPC. + +    Returns: +      The initial metadata object emitted by the service-side of the RPC, or +        None if there was no such value. +    """ +        raise NotImplementedError() + +    @abc.abstractmethod +    def terminal_metadata(self): +        """Accesses the terminal metadata from the service-side of the RPC. + +    This method blocks until the value is available or is known not to have been +    emitted from the service-side of the RPC. + +    Returns: +      The terminal metadata object emitted by the service-side of the RPC, or +        None if there was no such value. +    """ +        raise NotImplementedError() + +    @abc.abstractmethod +    def code(self): +        """Accesses the code emitted by the service-side of the RPC. + +    This method blocks until the value is available or is known not to have been +    emitted from the service-side of the RPC. + +    Returns: +      The code object emitted by the service-side of the RPC, or None if there +        was no such value. +    """ +        raise NotImplementedError() + +    @abc.abstractmethod +    def details(self): +        """Accesses the details value emitted by the service-side of the RPC. + +    This method blocks until the value is available or is known not to have been +    emitted from the service-side of the RPC. + +    Returns: +      The details value emitted by the service-side of the RPC, or None if there +        was no such value. +    """ +        raise NotImplementedError() + + +class ServicerContext(RpcContext, metaclass=abc.ABCMeta): +    """A context object passed to method implementations.""" + +    @abc.abstractmethod +    def invocation_metadata(self): +        """Accesses the metadata from the invocation-side of the RPC. + +    This method blocks until the value is available or is known not to have been +    emitted from the invocation-side of the RPC. + +    Returns: +      The metadata object emitted by the invocation-side of the RPC, or None if +        there was no such value. +    """ +        raise NotImplementedError() + +    @abc.abstractmethod +    def initial_metadata(self, initial_metadata): +        """Accepts the service-side initial metadata value of the RPC. + +    This method need not be called by method implementations if they have no +    service-side initial metadata to transmit. + +    Args: +      initial_metadata: The service-side initial metadata value of the RPC to +        be transmitted to the invocation side of the RPC. +    """ +        raise NotImplementedError() + +    @abc.abstractmethod +    def terminal_metadata(self, terminal_metadata): +        """Accepts the service-side terminal metadata value of the RPC. + +    This method need not be called by method implementations if they have no +    service-side terminal metadata to transmit. + +    Args: +      terminal_metadata: The service-side terminal metadata value of the RPC to +        be transmitted to the invocation side of the RPC. +    """ +        raise NotImplementedError() + +    @abc.abstractmethod +    def code(self, code): +        """Accepts the service-side code of the RPC. + +    This method need not be called by method implementations if they have no +    code to transmit. + +    Args: +      code: The code of the RPC to be transmitted to the invocation side of the +        RPC. +    """ +        raise NotImplementedError() + +    @abc.abstractmethod +    def details(self, details): +        """Accepts the service-side details of the RPC. + +    This method need not be called by method implementations if they have no +    service-side details to transmit. + +    Args: +      details: The service-side details value of the RPC to be transmitted to +        the invocation side of the RPC. +    """ +        raise NotImplementedError() + + +class ResponseReceiver(abc.ABC): +    """Invocation-side object used to accept the output of an RPC.""" + +    @abc.abstractmethod +    def initial_metadata(self, initial_metadata): +        """Receives the initial metadata from the service-side of the RPC. + +    Args: +      initial_metadata: The initial metadata object emitted from the +        service-side of the RPC. +    """ +        raise NotImplementedError() + +    @abc.abstractmethod +    def response(self, response): +        """Receives a response from the service-side of the RPC. + +    Args: +      response: A response object emitted from the service-side of the RPC. +    """ +        raise NotImplementedError() + +    @abc.abstractmethod +    def complete(self, terminal_metadata, code, details): +        """Receives the completion values emitted from the service-side of the RPC. + +    Args: +      terminal_metadata: The terminal metadata object emitted from the +        service-side of the RPC. +      code: The code object emitted from the service-side of the RPC. +      details: The details object emitted from the service-side of the RPC. +    """ +        raise NotImplementedError() + + +class UnaryUnaryMultiCallable(abc.ABC): +    """Affords invoking a unary-unary RPC in any call style.""" + +    @abc.abstractmethod +    def __call__(self, +                 request, +                 timeout, +                 metadata=None, +                 with_call=False, +                 protocol_options=None): +        """Synchronously invokes the underlying RPC. + +    Args: +      request: The request value for the RPC. +      timeout: A duration of time in seconds to allow for the RPC. +      metadata: A metadata value to be passed to the service-side of +        the RPC. +      with_call: Whether or not to include return a Call for the RPC in addition +        to the response. +      protocol_options: A value specified by the provider of a Face interface +        implementation affording custom state and behavior. + +    Returns: +      The response value for the RPC, and a Call for the RPC if with_call was +        set to True at invocation. + +    Raises: +      AbortionError: Indicating that the RPC was aborted. +    """ +        raise NotImplementedError() + +    @abc.abstractmethod +    def future(self, request, timeout, metadata=None, protocol_options=None): +        """Asynchronously invokes the underlying RPC. + +    Args: +      request: The request value for the RPC. +      timeout: A duration of time in seconds to allow for the RPC. +      metadata: A metadata value to be passed to the service-side of +        the RPC. +      protocol_options: A value specified by the provider of a Face interface +        implementation affording custom state and behavior. + +    Returns: +      An object that is both a Call for the RPC and a future.Future. In the +        event of RPC completion, the return Future's result value will be the +        response value of the RPC. In the event of RPC abortion, the returned +        Future's exception value will be an AbortionError. +    """ +        raise NotImplementedError() + +    @abc.abstractmethod +    def event(self, +              request, +              receiver, +              abortion_callback, +              timeout, +              metadata=None, +              protocol_options=None): +        """Asynchronously invokes the underlying RPC. + +    Args: +      request: The request value for the RPC. +      receiver: A ResponseReceiver to be passed the response data of the RPC. +      abortion_callback: A callback to be called and passed an Abortion value +        in the event of RPC abortion. +      timeout: A duration of time in seconds to allow for the RPC. +      metadata: A metadata value to be passed to the service-side of +        the RPC. +      protocol_options: A value specified by the provider of a Face interface +        implementation affording custom state and behavior. + +    Returns: +      A Call for the RPC. +    """ +        raise NotImplementedError() + + +class UnaryStreamMultiCallable(abc.ABC): +    """Affords invoking a unary-stream RPC in any call style.""" + +    @abc.abstractmethod +    def __call__(self, request, timeout, metadata=None, protocol_options=None): +        """Invokes the underlying RPC. + +    Args: +      request: The request value for the RPC. +      timeout: A duration of time in seconds to allow for the RPC. +      metadata: A metadata value to be passed to the service-side of +        the RPC. +      protocol_options: A value specified by the provider of a Face interface +        implementation affording custom state and behavior. + +    Returns: +      An object that is both a Call for the RPC and an iterator of response +        values. Drawing response values from the returned iterator may raise +        AbortionError indicating abortion of the RPC. +    """ +        raise NotImplementedError() + +    @abc.abstractmethod +    def event(self, +              request, +              receiver, +              abortion_callback, +              timeout, +              metadata=None, +              protocol_options=None): +        """Asynchronously invokes the underlying RPC. + +    Args: +      request: The request value for the RPC. +      receiver: A ResponseReceiver to be passed the response data of the RPC. +      abortion_callback: A callback to be called and passed an Abortion value +        in the event of RPC abortion. +      timeout: A duration of time in seconds to allow for the RPC. +      metadata: A metadata value to be passed to the service-side of +        the RPC. +      protocol_options: A value specified by the provider of a Face interface +        implementation affording custom state and behavior. + +    Returns: +      A Call object for the RPC. +    """ +        raise NotImplementedError() + + +class StreamUnaryMultiCallable(abc.ABC): +    """Affords invoking a stream-unary RPC in any call style.""" + +    @abc.abstractmethod +    def __call__(self, +                 request_iterator, +                 timeout, +                 metadata=None, +                 with_call=False, +                 protocol_options=None): +        """Synchronously invokes the underlying RPC. + +    Args: +      request_iterator: An iterator that yields request values for the RPC. +      timeout: A duration of time in seconds to allow for the RPC. +      metadata: A metadata value to be passed to the service-side of +        the RPC. +      with_call: Whether or not to include return a Call for the RPC in addition +        to the response. +      protocol_options: A value specified by the provider of a Face interface +        implementation affording custom state and behavior. + +    Returns: +      The response value for the RPC, and a Call for the RPC if with_call was +        set to True at invocation. + +    Raises: +      AbortionError: Indicating that the RPC was aborted. +    """ +        raise NotImplementedError() + +    @abc.abstractmethod +    def future(self, +               request_iterator, +               timeout, +               metadata=None, +               protocol_options=None): +        """Asynchronously invokes the underlying RPC. + +    Args: +      request_iterator: An iterator that yields request values for the RPC. +      timeout: A duration of time in seconds to allow for the RPC. +      metadata: A metadata value to be passed to the service-side of +        the RPC. +      protocol_options: A value specified by the provider of a Face interface +        implementation affording custom state and behavior. + +    Returns: +      An object that is both a Call for the RPC and a future.Future. In the +        event of RPC completion, the return Future's result value will be the +        response value of the RPC. In the event of RPC abortion, the returned +        Future's exception value will be an AbortionError. +    """ +        raise NotImplementedError() + +    @abc.abstractmethod +    def event(self, +              receiver, +              abortion_callback, +              timeout, +              metadata=None, +              protocol_options=None): +        """Asynchronously invokes the underlying RPC. + +    Args: +      receiver: A ResponseReceiver to be passed the response data of the RPC. +      abortion_callback: A callback to be called and passed an Abortion value +        in the event of RPC abortion. +      timeout: A duration of time in seconds to allow for the RPC. +      metadata: A metadata value to be passed to the service-side of +        the RPC. +      protocol_options: A value specified by the provider of a Face interface +        implementation affording custom state and behavior. + +    Returns: +      A single object that is both a Call object for the RPC and a +        stream.Consumer to which the request values of the RPC should be passed. +    """ +        raise NotImplementedError() + + +class StreamStreamMultiCallable(abc.ABC): +    """Affords invoking a stream-stream RPC in any call style.""" + +    @abc.abstractmethod +    def __call__(self, +                 request_iterator, +                 timeout, +                 metadata=None, +                 protocol_options=None): +        """Invokes the underlying RPC. + +    Args: +      request_iterator: An iterator that yields request values for the RPC. +      timeout: A duration of time in seconds to allow for the RPC. +      metadata: A metadata value to be passed to the service-side of +        the RPC. +      protocol_options: A value specified by the provider of a Face interface +        implementation affording custom state and behavior. + +    Returns: +      An object that is both a Call for the RPC and an iterator of response +        values. Drawing response values from the returned iterator may raise +        AbortionError indicating abortion of the RPC. +    """ +        raise NotImplementedError() + +    @abc.abstractmethod +    def event(self, +              receiver, +              abortion_callback, +              timeout, +              metadata=None, +              protocol_options=None): +        """Asynchronously invokes the underlying RPC. + +    Args: +      receiver: A ResponseReceiver to be passed the response data of the RPC. +      abortion_callback: A callback to be called and passed an Abortion value +        in the event of RPC abortion. +      timeout: A duration of time in seconds to allow for the RPC. +      metadata: A metadata value to be passed to the service-side of +        the RPC. +      protocol_options: A value specified by the provider of a Face interface +        implementation affording custom state and behavior. + +    Returns: +      A single object that is both a Call object for the RPC and a +        stream.Consumer to which the request values of the RPC should be passed. +    """ +        raise NotImplementedError() + + +class MethodImplementation(abc.ABC): +    """A sum type that describes a method implementation. + +  Attributes: +    cardinality: A cardinality.Cardinality value. +    style: A style.Service value. +    unary_unary_inline: The implementation of the method as a callable value +      that takes a request value and a ServicerContext object and returns a +      response value. Only non-None if cardinality is +      cardinality.Cardinality.UNARY_UNARY and style is style.Service.INLINE. +    unary_stream_inline: The implementation of the method as a callable value +      that takes a request value and a ServicerContext object and returns an +      iterator of response values. Only non-None if cardinality is +      cardinality.Cardinality.UNARY_STREAM and style is style.Service.INLINE. +    stream_unary_inline: The implementation of the method as a callable value +      that takes an iterator of request values and a ServicerContext object and +      returns a response value. Only non-None if cardinality is +      cardinality.Cardinality.STREAM_UNARY and style is style.Service.INLINE. +    stream_stream_inline: The implementation of the method as a callable value +      that takes an iterator of request values and a ServicerContext object and +      returns an iterator of response values. Only non-None if cardinality is +      cardinality.Cardinality.STREAM_STREAM and style is style.Service.INLINE. +    unary_unary_event: The implementation of the method as a callable value that +      takes a request value, a response callback to which to pass the response +      value of the RPC, and a ServicerContext. Only non-None if cardinality is +      cardinality.Cardinality.UNARY_UNARY and style is style.Service.EVENT. +    unary_stream_event: The implementation of the method as a callable value +      that takes a request value, a stream.Consumer to which to pass the +      response values of the RPC, and a ServicerContext. Only non-None if +      cardinality is cardinality.Cardinality.UNARY_STREAM and style is +      style.Service.EVENT. +    stream_unary_event: The implementation of the method as a callable value +      that takes a response callback to which to pass the response value of the +      RPC and a ServicerContext and returns a stream.Consumer to which the +      request values of the RPC should be passed. Only non-None if cardinality +      is cardinality.Cardinality.STREAM_UNARY and style is style.Service.EVENT. +    stream_stream_event: The implementation of the method as a callable value +      that takes a stream.Consumer to which to pass the response values of the +      RPC and a ServicerContext and returns a stream.Consumer to which the +      request values of the RPC should be passed. Only non-None if cardinality +      is cardinality.Cardinality.STREAM_STREAM and style is +      style.Service.EVENT. +  """ + + +class MultiMethodImplementation(abc.ABC): +    """A general type able to service many methods.""" + +    @abc.abstractmethod +    def service(self, group, method, response_consumer, context): +        """Services an RPC. + +    Args: +      group: The group identifier of the RPC. +      method: The method identifier of the RPC. +      response_consumer: A stream.Consumer to be called to accept the response +        values of the RPC. +      context: a ServicerContext object. + +    Returns: +      A stream.Consumer with which to accept the request values of the RPC. The +        consumer returned from this method may or may not be invoked to +        completion: in the case of RPC abortion, RPC Framework will simply stop +        passing values to this object. Implementations must not assume that this +        object will be called to completion of the request stream or even called +        at all. + +    Raises: +      abandonment.Abandoned: May or may not be raised when the RPC has been +        aborted. +      NoSuchMethodError: If this MultiMethod does not recognize the given group +        and name for the RPC and is not able to service the RPC. +    """ +        raise NotImplementedError() + + +class GenericStub(abc.ABC): +    """Affords RPC invocation via generic methods.""" + +    @abc.abstractmethod +    def blocking_unary_unary(self, +                             group, +                             method, +                             request, +                             timeout, +                             metadata=None, +                             with_call=False, +                             protocol_options=None): +        """Invokes a unary-request-unary-response method. + +    This method blocks until either returning the response value of the RPC +    (in the event of RPC completion) or raising an exception (in the event of +    RPC abortion). + +    Args: +      group: The group identifier of the RPC. +      method: The method identifier of the RPC. +      request: The request value for the RPC. +      timeout: A duration of time in seconds to allow for the RPC. +      metadata: A metadata value to be passed to the service-side of the RPC. +      with_call: Whether or not to include return a Call for the RPC in addition +        to the response. +      protocol_options: A value specified by the provider of a Face interface +        implementation affording custom state and behavior. + +    Returns: +      The response value for the RPC, and a Call for the RPC if with_call was +        set to True at invocation. + +    Raises: +      AbortionError: Indicating that the RPC was aborted. +    """ +        raise NotImplementedError() + +    @abc.abstractmethod +    def future_unary_unary(self, +                           group, +                           method, +                           request, +                           timeout, +                           metadata=None, +                           protocol_options=None): +        """Invokes a unary-request-unary-response method. + +    Args: +      group: The group identifier of the RPC. +      method: The method identifier of the RPC. +      request: The request value for the RPC. +      timeout: A duration of time in seconds to allow for the RPC. +      metadata: A metadata value to be passed to the service-side of the RPC. +      protocol_options: A value specified by the provider of a Face interface +        implementation affording custom state and behavior. + +    Returns: +      An object that is both a Call for the RPC and a future.Future. In the +        event of RPC completion, the return Future's result value will be the +        response value of the RPC. In the event of RPC abortion, the returned +        Future's exception value will be an AbortionError. +    """ +        raise NotImplementedError() + +    @abc.abstractmethod +    def inline_unary_stream(self, +                            group, +                            method, +                            request, +                            timeout, +                            metadata=None, +                            protocol_options=None): +        """Invokes a unary-request-stream-response method. + +    Args: +      group: The group identifier of the RPC. +      method: The method identifier of the RPC. +      request: The request value for the RPC. +      timeout: A duration of time in seconds to allow for the RPC. +      metadata: A metadata value to be passed to the service-side of the RPC. +      protocol_options: A value specified by the provider of a Face interface +        implementation affording custom state and behavior. + +    Returns: +      An object that is both a Call for the RPC and an iterator of response +        values. Drawing response values from the returned iterator may raise +        AbortionError indicating abortion of the RPC. +    """ +        raise NotImplementedError() + +    @abc.abstractmethod +    def blocking_stream_unary(self, +                              group, +                              method, +                              request_iterator, +                              timeout, +                              metadata=None, +                              with_call=False, +                              protocol_options=None): +        """Invokes a stream-request-unary-response method. + +    This method blocks until either returning the response value of the RPC +    (in the event of RPC completion) or raising an exception (in the event of +    RPC abortion). + +    Args: +      group: The group identifier of the RPC. +      method: The method identifier of the RPC. +      request_iterator: An iterator that yields request values for the RPC. +      timeout: A duration of time in seconds to allow for the RPC. +      metadata: A metadata value to be passed to the service-side of the RPC. +      with_call: Whether or not to include return a Call for the RPC in addition +        to the response. +      protocol_options: A value specified by the provider of a Face interface +        implementation affording custom state and behavior. + +    Returns: +      The response value for the RPC, and a Call for the RPC if with_call was +        set to True at invocation. + +    Raises: +      AbortionError: Indicating that the RPC was aborted. +    """ +        raise NotImplementedError() + +    @abc.abstractmethod +    def future_stream_unary(self, +                            group, +                            method, +                            request_iterator, +                            timeout, +                            metadata=None, +                            protocol_options=None): +        """Invokes a stream-request-unary-response method. + +    Args: +      group: The group identifier of the RPC. +      method: The method identifier of the RPC. +      request_iterator: An iterator that yields request values for the RPC. +      timeout: A duration of time in seconds to allow for the RPC. +      metadata: A metadata value to be passed to the service-side of the RPC. +      protocol_options: A value specified by the provider of a Face interface +        implementation affording custom state and behavior. + +    Returns: +      An object that is both a Call for the RPC and a future.Future. In the +        event of RPC completion, the return Future's result value will be the +        response value of the RPC. In the event of RPC abortion, the returned +        Future's exception value will be an AbortionError. +    """ +        raise NotImplementedError() + +    @abc.abstractmethod +    def inline_stream_stream(self, +                             group, +                             method, +                             request_iterator, +                             timeout, +                             metadata=None, +                             protocol_options=None): +        """Invokes a stream-request-stream-response method. + +    Args: +      group: The group identifier of the RPC. +      method: The method identifier of the RPC. +      request_iterator: An iterator that yields request values for the RPC. +      timeout: A duration of time in seconds to allow for the RPC. +      metadata: A metadata value to be passed to the service-side of the RPC. +      protocol_options: A value specified by the provider of a Face interface +        implementation affording custom state and behavior. + +    Returns: +      An object that is both a Call for the RPC and an iterator of response +        values. Drawing response values from the returned iterator may raise +        AbortionError indicating abortion of the RPC. +    """ +        raise NotImplementedError() + +    @abc.abstractmethod +    def event_unary_unary(self, +                          group, +                          method, +                          request, +                          receiver, +                          abortion_callback, +                          timeout, +                          metadata=None, +                          protocol_options=None): +        """Event-driven invocation of a unary-request-unary-response method. + +    Args: +      group: The group identifier of the RPC. +      method: The method identifier of the RPC. +      request: The request value for the RPC. +      receiver: A ResponseReceiver to be passed the response data of the RPC. +      abortion_callback: A callback to be called and passed an Abortion value +        in the event of RPC abortion. +      timeout: A duration of time in seconds to allow for the RPC. +      metadata: A metadata value to be passed to the service-side of the RPC. +      protocol_options: A value specified by the provider of a Face interface +        implementation affording custom state and behavior. + +    Returns: +      A Call for the RPC. +    """ +        raise NotImplementedError() + +    @abc.abstractmethod +    def event_unary_stream(self, +                           group, +                           method, +                           request, +                           receiver, +                           abortion_callback, +                           timeout, +                           metadata=None, +                           protocol_options=None): +        """Event-driven invocation of a unary-request-stream-response method. + +    Args: +      group: The group identifier of the RPC. +      method: The method identifier of the RPC. +      request: The request value for the RPC. +      receiver: A ResponseReceiver to be passed the response data of the RPC. +      abortion_callback: A callback to be called and passed an Abortion value +        in the event of RPC abortion. +      timeout: A duration of time in seconds to allow for the RPC. +      metadata: A metadata value to be passed to the service-side of the RPC. +      protocol_options: A value specified by the provider of a Face interface +        implementation affording custom state and behavior. + +    Returns: +      A Call for the RPC. +    """ +        raise NotImplementedError() + +    @abc.abstractmethod +    def event_stream_unary(self, +                           group, +                           method, +                           receiver, +                           abortion_callback, +                           timeout, +                           metadata=None, +                           protocol_options=None): +        """Event-driven invocation of a unary-request-unary-response method. + +    Args: +      group: The group identifier of the RPC. +      method: The method identifier of the RPC. +      receiver: A ResponseReceiver to be passed the response data of the RPC. +      abortion_callback: A callback to be called and passed an Abortion value +        in the event of RPC abortion. +      timeout: A duration of time in seconds to allow for the RPC. +      metadata: A metadata value to be passed to the service-side of the RPC. +      protocol_options: A value specified by the provider of a Face interface +        implementation affording custom state and behavior. + +    Returns: +      A pair of a Call object for the RPC and a stream.Consumer to which the +        request values of the RPC should be passed. +    """ +        raise NotImplementedError() + +    @abc.abstractmethod +    def event_stream_stream(self, +                            group, +                            method, +                            receiver, +                            abortion_callback, +                            timeout, +                            metadata=None, +                            protocol_options=None): +        """Event-driven invocation of a unary-request-stream-response method. + +    Args: +      group: The group identifier of the RPC. +      method: The method identifier of the RPC. +      receiver: A ResponseReceiver to be passed the response data of the RPC. +      abortion_callback: A callback to be called and passed an Abortion value +        in the event of RPC abortion. +      timeout: A duration of time in seconds to allow for the RPC. +      metadata: A metadata value to be passed to the service-side of the RPC. +      protocol_options: A value specified by the provider of a Face interface +        implementation affording custom state and behavior. + +    Returns: +      A pair of a Call object for the RPC and a stream.Consumer to which the +        request values of the RPC should be passed. +    """ +        raise NotImplementedError() + +    @abc.abstractmethod +    def unary_unary(self, group, method): +        """Creates a UnaryUnaryMultiCallable for a unary-unary method. + +    Args: +      group: The group identifier of the RPC. +      method: The method identifier of the RPC. + +    Returns: +      A UnaryUnaryMultiCallable value for the named unary-unary method. +    """ +        raise NotImplementedError() + +    @abc.abstractmethod +    def unary_stream(self, group, method): +        """Creates a UnaryStreamMultiCallable for a unary-stream method. + +    Args: +      group: The group identifier of the RPC. +      method: The method identifier of the RPC. + +    Returns: +      A UnaryStreamMultiCallable value for the name unary-stream method. +    """ +        raise NotImplementedError() + +    @abc.abstractmethod +    def stream_unary(self, group, method): +        """Creates a StreamUnaryMultiCallable for a stream-unary method. + +    Args: +      group: The group identifier of the RPC. +      method: The method identifier of the RPC. + +    Returns: +      A StreamUnaryMultiCallable value for the named stream-unary method. +    """ +        raise NotImplementedError() + +    @abc.abstractmethod +    def stream_stream(self, group, method): +        """Creates a StreamStreamMultiCallable for a stream-stream method. + +    Args: +      group: The group identifier of the RPC. +      method: The method identifier of the RPC. + +    Returns: +      A StreamStreamMultiCallable value for the named stream-stream method. +    """ +        raise NotImplementedError() + + +class DynamicStub(abc.ABC): +    """Affords RPC invocation via attributes corresponding to afforded methods. + +  Instances of this type may be scoped to a single group so that attribute +  access is unambiguous. + +  Instances of this type respond to attribute access as follows: if the +  requested attribute is the name of a unary-unary method, the value of the +  attribute will be a UnaryUnaryMultiCallable with which to invoke an RPC; if +  the requested attribute is the name of a unary-stream method, the value of the +  attribute will be a UnaryStreamMultiCallable with which to invoke an RPC; if +  the requested attribute is the name of a stream-unary method, the value of the +  attribute will be a StreamUnaryMultiCallable with which to invoke an RPC; and +  if the requested attribute is the name of a stream-stream method, the value of +  the attribute will be a StreamStreamMultiCallable with which to invoke an RPC. +  """ diff --git a/contrib/python/grpcio/py3/grpc/framework/interfaces/face/utilities.py b/contrib/python/grpcio/py3/grpc/framework/interfaces/face/utilities.py new file mode 100644 index 00000000000..f27bd676155 --- /dev/null +++ b/contrib/python/grpcio/py3/grpc/framework/interfaces/face/utilities.py @@ -0,0 +1,168 @@ +# Copyright 2015 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. +"""Utilities for RPC Framework's Face interface.""" + +import collections + +# stream is referenced from specification in this module. +from grpc.framework.common import cardinality +from grpc.framework.common import style +from grpc.framework.foundation import stream  # pylint: disable=unused-import +from grpc.framework.interfaces.face import face + + +class _MethodImplementation(face.MethodImplementation, +                            collections.namedtuple('_MethodImplementation', [ +                                'cardinality', +                                'style', +                                'unary_unary_inline', +                                'unary_stream_inline', +                                'stream_unary_inline', +                                'stream_stream_inline', +                                'unary_unary_event', +                                'unary_stream_event', +                                'stream_unary_event', +                                'stream_stream_event', +                            ])): +    pass + + +def unary_unary_inline(behavior): +    """Creates an face.MethodImplementation for the given behavior. + +  Args: +    behavior: The implementation of a unary-unary RPC method as a callable value +      that takes a request value and an face.ServicerContext object and +      returns a response value. + +  Returns: +    An face.MethodImplementation derived from the given behavior. +  """ +    return _MethodImplementation(cardinality.Cardinality.UNARY_UNARY, +                                 style.Service.INLINE, behavior, None, None, +                                 None, None, None, None, None) + + +def unary_stream_inline(behavior): +    """Creates an face.MethodImplementation for the given behavior. + +  Args: +    behavior: The implementation of a unary-stream RPC method as a callable +      value that takes a request value and an face.ServicerContext object and +      returns an iterator of response values. + +  Returns: +    An face.MethodImplementation derived from the given behavior. +  """ +    return _MethodImplementation(cardinality.Cardinality.UNARY_STREAM, +                                 style.Service.INLINE, None, behavior, None, +                                 None, None, None, None, None) + + +def stream_unary_inline(behavior): +    """Creates an face.MethodImplementation for the given behavior. + +  Args: +    behavior: The implementation of a stream-unary RPC method as a callable +      value that takes an iterator of request values and an +      face.ServicerContext object and returns a response value. + +  Returns: +    An face.MethodImplementation derived from the given behavior. +  """ +    return _MethodImplementation(cardinality.Cardinality.STREAM_UNARY, +                                 style.Service.INLINE, None, None, behavior, +                                 None, None, None, None, None) + + +def stream_stream_inline(behavior): +    """Creates an face.MethodImplementation for the given behavior. + +  Args: +    behavior: The implementation of a stream-stream RPC method as a callable +      value that takes an iterator of request values and an +      face.ServicerContext object and returns an iterator of response values. + +  Returns: +    An face.MethodImplementation derived from the given behavior. +  """ +    return _MethodImplementation(cardinality.Cardinality.STREAM_STREAM, +                                 style.Service.INLINE, None, None, None, +                                 behavior, None, None, None, None) + + +def unary_unary_event(behavior): +    """Creates an face.MethodImplementation for the given behavior. + +  Args: +    behavior: The implementation of a unary-unary RPC method as a callable +      value that takes a request value, a response callback to which to pass +      the response value of the RPC, and an face.ServicerContext. + +  Returns: +    An face.MethodImplementation derived from the given behavior. +  """ +    return _MethodImplementation(cardinality.Cardinality.UNARY_UNARY, +                                 style.Service.EVENT, None, None, None, None, +                                 behavior, None, None, None) + + +def unary_stream_event(behavior): +    """Creates an face.MethodImplementation for the given behavior. + +  Args: +    behavior: The implementation of a unary-stream RPC method as a callable +      value that takes a request value, a stream.Consumer to which to pass the +      the response values of the RPC, and an face.ServicerContext. + +  Returns: +    An face.MethodImplementation derived from the given behavior. +  """ +    return _MethodImplementation(cardinality.Cardinality.UNARY_STREAM, +                                 style.Service.EVENT, None, None, None, None, +                                 None, behavior, None, None) + + +def stream_unary_event(behavior): +    """Creates an face.MethodImplementation for the given behavior. + +  Args: +    behavior: The implementation of a stream-unary RPC method as a callable +      value that takes a response callback to which to pass the response value +      of the RPC and an face.ServicerContext and returns a stream.Consumer to +      which the request values of the RPC should be passed. + +  Returns: +    An face.MethodImplementation derived from the given behavior. +  """ +    return _MethodImplementation(cardinality.Cardinality.STREAM_UNARY, +                                 style.Service.EVENT, None, None, None, None, +                                 None, None, behavior, None) + + +def stream_stream_event(behavior): +    """Creates an face.MethodImplementation for the given behavior. + +  Args: +    behavior: The implementation of a stream-stream RPC method as a callable +      value that takes a stream.Consumer to which to pass the response values +      of the RPC and an face.ServicerContext and returns a stream.Consumer to +      which the request values of the RPC should be passed. + +  Returns: +    An face.MethodImplementation derived from the given behavior. +  """ +    return _MethodImplementation(cardinality.Cardinality.STREAM_STREAM, +                                 style.Service.EVENT, None, None, None, None, +                                 None, None, None, behavior)  | 
