Index: third_party/grpc/src/python/grpcio/grpc/framework/interfaces/face/face.py |
diff --git a/third_party/grpc/src/python/grpcio/grpc/framework/interfaces/face/face.py b/third_party/grpc/src/python/grpcio/grpc/framework/interfaces/face/face.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..404c3a7937aa58b9f958df1bab27977cc85e6128 |
--- /dev/null |
+++ b/third_party/grpc/src/python/grpcio/grpc/framework/interfaces/face/face.py |
@@ -0,0 +1,996 @@ |
+# Copyright 2015-2016, Google Inc. |
+# All rights reserved. |
+# |
+# Redistribution and use in source and binary forms, with or without |
+# modification, are permitted provided that the following conditions are |
+# met: |
+# |
+# * Redistributions of source code must retain the above copyright |
+# notice, this list of conditions and the following disclaimer. |
+# * Redistributions in binary form must reproduce the above |
+# copyright notice, this list of conditions and the following disclaimer |
+# in the documentation and/or other materials provided with the |
+# distribution. |
+# * Neither the name of Google Inc. nor the names of its |
+# contributors may be used to endorse or promote products derived from |
+# this software without specific prior written permission. |
+# |
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
+ |
+"""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 abandonment # pylint: disable=unused-import |
+from grpc.framework.foundation import future # pylint: disable=unused-import |
+from grpc.framework.foundation import stream # pylint: disable=unused-import |
+ |
+ |
+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): |
+ """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. |
+ """ |
+ __metaclass__ = abc.ABCMeta |
+ |
+ 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(object): |
+ """Provides RPC-related information and action.""" |
+ __metaclass__ = abc.ABCMeta |
+ |
+ @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): |
+ """Invocation-side utility object for an RPC.""" |
+ __metaclass__ = abc.ABCMeta |
+ |
+ @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): |
+ """A context object passed to method implementations.""" |
+ __metaclass__ = abc.ABCMeta |
+ |
+ @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(object): |
+ """Invocation-side object used to accept the output of an RPC.""" |
+ __metaclass__ = abc.ABCMeta |
+ |
+ @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(object): |
+ """Affords invoking a unary-unary RPC in any call style.""" |
+ __metaclass__ = abc.ABCMeta |
+ |
+ @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(object): |
+ """Affords invoking a unary-stream RPC in any call style.""" |
+ __metaclass__ = abc.ABCMeta |
+ |
+ @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(object): |
+ """Affords invoking a stream-unary RPC in any call style.""" |
+ __metaclass__ = abc.ABCMeta |
+ |
+ @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(object): |
+ """Affords invoking a stream-stream RPC in any call style.""" |
+ __metaclass__ = abc.ABCMeta |
+ |
+ @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(object): |
+ """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. |
+ """ |
+ __metaclass__ = abc.ABCMeta |
+ |
+ |
+class MultiMethodImplementation(object): |
+ """A general type able to service many methods.""" |
+ __metaclass__ = abc.ABCMeta |
+ |
+ @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(object): |
+ """Affords RPC invocation via generic methods.""" |
+ __metaclass__ = abc.ABCMeta |
+ |
+ @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(object): |
+ """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. |
+ """ |
+ __metaclass__ = abc.ABCMeta |