|  | @@ -0,0 +1,933 @@
 | 
	
		
			
				|  |  | +# Copyright 2015, 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
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +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()
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +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):
 | 
	
		
			
				|  |  | +    """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 reponse.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    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):
 | 
	
		
			
				|  |  | +    """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.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    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):
 | 
	
		
			
				|  |  | +    """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.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    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):
 | 
	
		
			
				|  |  | +    """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.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    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):
 | 
	
		
			
				|  |  | +    """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.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    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):
 | 
	
		
			
				|  |  | +    """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 reponse.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    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):
 | 
	
		
			
				|  |  | +    """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.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    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):
 | 
	
		
			
				|  |  | +    """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.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    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):
 | 
	
		
			
				|  |  | +    """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.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    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):
 | 
	
		
			
				|  |  | +    """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.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    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):
 | 
	
		
			
				|  |  | +    """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 reponse.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    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):
 | 
	
		
			
				|  |  | +    """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.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    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):
 | 
	
		
			
				|  |  | +    """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.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    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):
 | 
	
		
			
				|  |  | +    """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 reponse.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    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):
 | 
	
		
			
				|  |  | +    """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.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    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):
 | 
	
		
			
				|  |  | +    """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.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    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):
 | 
	
		
			
				|  |  | +    """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.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    Returns:
 | 
	
		
			
				|  |  | +      A Call for the RPC.
 | 
	
		
			
				|  |  | +    """
 | 
	
		
			
				|  |  | +    raise NotImplementedError()
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  @abc.abstractmethod
 | 
	
		
			
				|  |  | +  def event_unary_stream(
 | 
	
		
			
				|  |  | +      self, group, method, request, receiver, abortion_callback, timeout,
 | 
	
		
			
				|  |  | +      metadata=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.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    Returns:
 | 
	
		
			
				|  |  | +      A Call for the RPC.
 | 
	
		
			
				|  |  | +    """
 | 
	
		
			
				|  |  | +    raise NotImplementedError()
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  @abc.abstractmethod
 | 
	
		
			
				|  |  | +  def event_stream_unary(
 | 
	
		
			
				|  |  | +      self, group, method, receiver, abortion_callback, timeout,
 | 
	
		
			
				|  |  | +      metadata=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.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    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):
 | 
	
		
			
				|  |  | +    """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.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    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
 |