|  | @@ -32,11 +32,24 @@
 | 
	
		
			
				|  |  |  import abc
 | 
	
		
			
				|  |  |  import enum
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -# exceptions, abandonment, and future are referenced from specification in this
 | 
	
		
			
				|  |  | -# module.
 | 
	
		
			
				|  |  | +# cardinality, style, exceptions, 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.face import exceptions  # 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
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +@enum.unique
 | 
	
		
			
				|  |  | +class Abortion(enum.Enum):
 | 
	
		
			
				|  |  | +  """Categories of RPC abortion."""
 | 
	
		
			
				|  |  | +  CANCELLED = 'cancelled'
 | 
	
		
			
				|  |  | +  EXPIRED = 'expired'
 | 
	
		
			
				|  |  | +  NETWORK_FAILURE = 'network failure'
 | 
	
		
			
				|  |  | +  SERVICED_FAILURE = 'serviced failure'
 | 
	
		
			
				|  |  | +  SERVICER_FAILURE = 'servicer failure'
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  class CancellableIterator(object):
 | 
	
	
		
			
				|  | @@ -59,69 +72,61 @@ class CancellableIterator(object):
 | 
	
		
			
				|  |  |      raise NotImplementedError()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -class UnaryUnarySyncAsync(object):
 | 
	
		
			
				|  |  | -  """Affords invoking a unary-unary RPC synchronously or asynchronously.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  Values implementing this interface are directly callable and present an
 | 
	
		
			
				|  |  | -  "async" method. Both calls take a request value and a numeric timeout.
 | 
	
		
			
				|  |  | -  Direct invocation of a value of this type invokes its associated RPC and
 | 
	
		
			
				|  |  | -  blocks until the RPC's response is available. Calling the "async" method
 | 
	
		
			
				|  |  | -  of a value of this type invokes its associated RPC and immediately returns a
 | 
	
		
			
				|  |  | -  future.Future bound to the asynchronous execution of the RPC.
 | 
	
		
			
				|  |  | -  """
 | 
	
		
			
				|  |  | +class RpcContext(object):
 | 
	
		
			
				|  |  | +  """Provides RPC-related information and action."""
 | 
	
		
			
				|  |  |    __metaclass__ = abc.ABCMeta
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    @abc.abstractmethod
 | 
	
		
			
				|  |  | -  def __call__(self, request, timeout):
 | 
	
		
			
				|  |  | -    """Synchronously invokes the underlying RPC.
 | 
	
		
			
				|  |  | +  def is_active(self):
 | 
	
		
			
				|  |  | +    """Describes whether the RPC is active or has terminated."""
 | 
	
		
			
				|  |  | +    raise NotImplementedError()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    Args:
 | 
	
		
			
				|  |  | -      request: The request value for the RPC.
 | 
	
		
			
				|  |  | -      timeout: A duration of time in seconds to allow for the RPC.
 | 
	
		
			
				|  |  | +  @abc.abstractmethod
 | 
	
		
			
				|  |  | +  def time_remaining(self):
 | 
	
		
			
				|  |  | +    """Describes the length of allowed time remaining for the RPC.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      Returns:
 | 
	
		
			
				|  |  | -      The response value for the RPC.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    Raises:
 | 
	
		
			
				|  |  | -      exceptions.RpcError: Indicating that the RPC was aborted.
 | 
	
		
			
				|  |  | +      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 async(self, request, timeout):
 | 
	
		
			
				|  |  | -    """Asynchronously invokes the underlying RPC.
 | 
	
		
			
				|  |  | +  def add_abortion_callback(self, abortion_callback):
 | 
	
		
			
				|  |  | +    """Registers a callback to be called if the RPC is aborted.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      Args:
 | 
	
		
			
				|  |  | -      request: The request value for the RPC.
 | 
	
		
			
				|  |  | -      timeout: A duration of time in seconds to allow for the RPC.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    Returns:
 | 
	
		
			
				|  |  | -      A future.Future representing the RPC. In the event of RPC completion, the
 | 
	
		
			
				|  |  | -        returned 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 exceptions.RpcError.
 | 
	
		
			
				|  |  | +      abortion_callback: A callable to be called and passed an Abortion value
 | 
	
		
			
				|  |  | +        in the event of RPC abortion.
 | 
	
		
			
				|  |  |      """
 | 
	
		
			
				|  |  |      raise NotImplementedError()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -class StreamUnarySyncAsync(object):
 | 
	
		
			
				|  |  | -  """Affords invoking a stream-unary RPC synchronously or asynchronously.
 | 
	
		
			
				|  |  | +class Call(object):
 | 
	
		
			
				|  |  | +  """Invocation-side representation of an RPC.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  Values implementing this interface are directly callable and present an
 | 
	
		
			
				|  |  | -  "async" method. Both calls take an iterator of request values and a numeric
 | 
	
		
			
				|  |  | -  timeout. Direct invocation of a value of this type invokes its associated RPC
 | 
	
		
			
				|  |  | -  and blocks until the RPC's response is available. Calling the "async" method
 | 
	
		
			
				|  |  | -  of a value of this type invokes its associated RPC and immediately returns a
 | 
	
		
			
				|  |  | -  future.Future bound to the asynchronous execution of the RPC.
 | 
	
		
			
				|  |  | +  Attributes:
 | 
	
		
			
				|  |  | +    context: An RpcContext affording information about the RPC.
 | 
	
		
			
				|  |  |    """
 | 
	
		
			
				|  |  |    __metaclass__ = abc.ABCMeta
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    @abc.abstractmethod
 | 
	
		
			
				|  |  | -  def __call__(self, request_iterator, timeout):
 | 
	
		
			
				|  |  | +  def cancel(self):
 | 
	
		
			
				|  |  | +    """Requests cancellation 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):
 | 
	
		
			
				|  |  |      """Synchronously invokes the underlying RPC.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      Args:
 | 
	
		
			
				|  |  | -      request_iterator: An iterator that yields request values for the RPC.
 | 
	
		
			
				|  |  | +      request: The request value for the RPC.
 | 
	
		
			
				|  |  |        timeout: A duration of time in seconds to allow for the RPC.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      Returns:
 | 
	
	
		
			
				|  | @@ -133,11 +138,11 @@ class StreamUnarySyncAsync(object):
 | 
	
		
			
				|  |  |      raise NotImplementedError()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    @abc.abstractmethod
 | 
	
		
			
				|  |  | -  def async(self, request, timeout):
 | 
	
		
			
				|  |  | +  def future(self, request, timeout):
 | 
	
		
			
				|  |  |      """Asynchronously invokes the underlying RPC.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      Args:
 | 
	
		
			
				|  |  | -      request_iterator: An iterator that yields request values for the RPC.
 | 
	
		
			
				|  |  | +      request: The request value for the RPC.
 | 
	
		
			
				|  |  |        timeout: A duration of time in seconds to allow for the RPC.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      Returns:
 | 
	
	
		
			
				|  | @@ -148,248 +153,204 @@ class StreamUnarySyncAsync(object):
 | 
	
		
			
				|  |  |      """
 | 
	
		
			
				|  |  |      raise NotImplementedError()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -@enum.unique
 | 
	
		
			
				|  |  | -class Abortion(enum.Enum):
 | 
	
		
			
				|  |  | -  """Categories of RPC abortion."""
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  CANCELLED = 'cancelled'
 | 
	
		
			
				|  |  | -  EXPIRED = 'expired'
 | 
	
		
			
				|  |  | -  NETWORK_FAILURE = 'network failure'
 | 
	
		
			
				|  |  | -  SERVICED_FAILURE = 'serviced failure'
 | 
	
		
			
				|  |  | -  SERVICER_FAILURE = 'servicer failure'
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -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.
 | 
	
		
			
				|  |  | +  def event(self, request, response_callback, abortion_callback, timeout):
 | 
	
		
			
				|  |  | +    """Asynchronously invokes the underlying RPC.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      Args:
 | 
	
		
			
				|  |  | -      abortion_callback: A callable to be called and passed an Abortion value
 | 
	
		
			
				|  |  | +      request: The request value for the RPC.
 | 
	
		
			
				|  |  | +      response_callback: A callback to be called to accept the restponse value
 | 
	
		
			
				|  |  | +        of the RPC.
 | 
	
		
			
				|  |  | +      abortion_callback: A callback to be called and passed an Abortion value
 | 
	
		
			
				|  |  |          in the event of RPC abortion.
 | 
	
		
			
				|  |  | -    """
 | 
	
		
			
				|  |  | -    raise NotImplementedError()
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -class InlineValueInValueOutMethod(object):
 | 
	
		
			
				|  |  | -  """A type for inline unary-request-unary-response RPC methods."""
 | 
	
		
			
				|  |  | -  __metaclass__ = abc.ABCMeta
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  @abc.abstractmethod
 | 
	
		
			
				|  |  | -  def service(self, request, context):
 | 
	
		
			
				|  |  | -    """Services an RPC that accepts one value and produces one value.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    Args:
 | 
	
		
			
				|  |  | -      request: The single request value for the RPC.
 | 
	
		
			
				|  |  | -      context: An RpcContext object.
 | 
	
		
			
				|  |  | +      timeout: A duration of time in seconds to allow for the RPC.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      Returns:
 | 
	
		
			
				|  |  | -      The single response value for the RPC.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    Raises:
 | 
	
		
			
				|  |  | -      abandonment.Abandoned: If no response is necessary because the RPC has
 | 
	
		
			
				|  |  | -        been aborted.
 | 
	
		
			
				|  |  | +      A Call object for the RPC.
 | 
	
		
			
				|  |  |      """
 | 
	
		
			
				|  |  |      raise NotImplementedError()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -class InlineValueInStreamOutMethod(object):
 | 
	
		
			
				|  |  | -  """A type for inline unary-request-stream-response RPC methods."""
 | 
	
		
			
				|  |  | +class UnaryStreamMultiCallable(object):
 | 
	
		
			
				|  |  | +  """Affords invoking a unary-stream RPC in any call style."""
 | 
	
		
			
				|  |  |    __metaclass__ = abc.ABCMeta
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    @abc.abstractmethod
 | 
	
		
			
				|  |  | -  def service(self, request, context):
 | 
	
		
			
				|  |  | -    """Services an RPC that accepts one value and produces a stream of values.
 | 
	
		
			
				|  |  | +  def __call__(self, request, timeout):
 | 
	
		
			
				|  |  | +    """Synchronously invokes the underlying RPC.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      Args:
 | 
	
		
			
				|  |  | -      request: The single request value for the RPC.
 | 
	
		
			
				|  |  | -      context: An RpcContext object.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    Yields:
 | 
	
		
			
				|  |  | -      The values that comprise the response stream of the RPC.
 | 
	
		
			
				|  |  | +      request: The request value for the RPC.
 | 
	
		
			
				|  |  | +      timeout: A duration of time in seconds to allow for the RPC.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    Raises:
 | 
	
		
			
				|  |  | -      abandonment.Abandoned: If completing the response stream is not necessary
 | 
	
		
			
				|  |  | -        because the RPC has been aborted.
 | 
	
		
			
				|  |  | +    Returns:
 | 
	
		
			
				|  |  | +      A CancellableIterator that yields the response values of the RPC and
 | 
	
		
			
				|  |  | +        affords RPC cancellation. Drawing response values from the returned
 | 
	
		
			
				|  |  | +        CancellableIterator may raise exceptions.RpcError indicating abortion
 | 
	
		
			
				|  |  | +        of the RPC.
 | 
	
		
			
				|  |  |      """
 | 
	
		
			
				|  |  |      raise NotImplementedError()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -class InlineStreamInValueOutMethod(object):
 | 
	
		
			
				|  |  | -  """A type for inline stream-request-unary-response RPC methods."""
 | 
	
		
			
				|  |  | -  __metaclass__ = abc.ABCMeta
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |    @abc.abstractmethod
 | 
	
		
			
				|  |  | -  def service(self, request_iterator, context):
 | 
	
		
			
				|  |  | -    """Services an RPC that accepts a stream of values and produces one value.
 | 
	
		
			
				|  |  | +  def event(self, request, response_consumer, abortion_callback, timeout):
 | 
	
		
			
				|  |  | +    """Asynchronously invokes the underlying RPC.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      Args:
 | 
	
		
			
				|  |  | -      request_iterator: An iterator that yields the request values of the RPC.
 | 
	
		
			
				|  |  | -        Drawing values from this iterator may also raise exceptions.RpcError to
 | 
	
		
			
				|  |  | -        indicate abortion of the RPC.
 | 
	
		
			
				|  |  | -      context: An RpcContext object.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    Yields:
 | 
	
		
			
				|  |  | -      The values that comprise the response stream of the RPC.
 | 
	
		
			
				|  |  | +      request: The request value for the RPC.
 | 
	
		
			
				|  |  | +      response_consumer: A stream.Consumer to be called to accept the restponse
 | 
	
		
			
				|  |  | +        values 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.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    Raises:
 | 
	
		
			
				|  |  | -      abandonment.Abandoned: If no response is necessary because the RPC has
 | 
	
		
			
				|  |  | -        been aborted.
 | 
	
		
			
				|  |  | -      exceptions.RpcError: Implementations of this method must not deliberately
 | 
	
		
			
				|  |  | -        raise exceptions.RpcError but may allow such errors raised by the
 | 
	
		
			
				|  |  | -        request_iterator passed to them to propagate through their bodies
 | 
	
		
			
				|  |  | -        uncaught.
 | 
	
		
			
				|  |  | +    Returns:
 | 
	
		
			
				|  |  | +      A Call object for the RPC.
 | 
	
		
			
				|  |  |      """
 | 
	
		
			
				|  |  |      raise NotImplementedError()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -class InlineStreamInStreamOutMethod(object):
 | 
	
		
			
				|  |  | -  """A type for inline stream-request-stream-response RPC methods."""
 | 
	
		
			
				|  |  | +class StreamUnaryMultiCallable(object):
 | 
	
		
			
				|  |  | +  """Affords invoking a stream-unary RPC in any call style."""
 | 
	
		
			
				|  |  |    __metaclass__ = abc.ABCMeta
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    @abc.abstractmethod
 | 
	
		
			
				|  |  | -  def service(self, request_iterator, context):
 | 
	
		
			
				|  |  | -    """Services an RPC that accepts and produces streams of values.
 | 
	
		
			
				|  |  | +  def __call__(self, request_iterator, timeout):
 | 
	
		
			
				|  |  | +    """Synchronously invokes the underlying RPC.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      Args:
 | 
	
		
			
				|  |  | -      request_iterator: An iterator that yields the request values of the RPC.
 | 
	
		
			
				|  |  | -        Drawing values from this iterator may also raise exceptions.RpcError to
 | 
	
		
			
				|  |  | -        indicate abortion of the RPC.
 | 
	
		
			
				|  |  | -      context: An RpcContext object.
 | 
	
		
			
				|  |  | +      request_iterator: An iterator that yields request values for the RPC.
 | 
	
		
			
				|  |  | +      timeout: A duration of time in seconds to allow for the RPC.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    Yields:
 | 
	
		
			
				|  |  | -      The values that comprise the response stream of the RPC.
 | 
	
		
			
				|  |  | +    Returns:
 | 
	
		
			
				|  |  | +      The response value for the RPC.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      Raises:
 | 
	
		
			
				|  |  | -      abandonment.Abandoned: If completing the response stream is not necessary
 | 
	
		
			
				|  |  | -        because the RPC has been aborted.
 | 
	
		
			
				|  |  | -      exceptions.RpcError: Implementations of this method must not deliberately
 | 
	
		
			
				|  |  | -        raise exceptions.RpcError but may allow such errors raised by the
 | 
	
		
			
				|  |  | -        request_iterator passed to them to propagate through their bodies
 | 
	
		
			
				|  |  | -        uncaught.
 | 
	
		
			
				|  |  | +      exceptions.RpcError: Indicating that the RPC was aborted.
 | 
	
		
			
				|  |  |      """
 | 
	
		
			
				|  |  |      raise NotImplementedError()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -class EventValueInValueOutMethod(object):
 | 
	
		
			
				|  |  | -  """A type for event-driven unary-request-unary-response RPC methods."""
 | 
	
		
			
				|  |  | -  __metaclass__ = abc.ABCMeta
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |    @abc.abstractmethod
 | 
	
		
			
				|  |  | -  def service(self, request, response_callback, context):
 | 
	
		
			
				|  |  | -    """Services an RPC that accepts one value and produces one value.
 | 
	
		
			
				|  |  | +  def future(self, request_iterator, timeout):
 | 
	
		
			
				|  |  | +    """Asynchronously invokes the underlying RPC.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      Args:
 | 
	
		
			
				|  |  | -      request: The single request value for the RPC.
 | 
	
		
			
				|  |  | -      response_callback: A callback to be called to accept the response value of
 | 
	
		
			
				|  |  | -        the RPC.
 | 
	
		
			
				|  |  | -      context: An RpcContext object.
 | 
	
		
			
				|  |  | +      request_iterator: An iterator that yields request values for the RPC.
 | 
	
		
			
				|  |  | +      timeout: A duration of time in seconds to allow for the RPC.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    Raises:
 | 
	
		
			
				|  |  | -      abandonment.Abandoned: May or may not be raised when the RPC has been
 | 
	
		
			
				|  |  | -        aborted.
 | 
	
		
			
				|  |  | +    Returns:
 | 
	
		
			
				|  |  | +      A future.Future representing the RPC. In the event of RPC completion, the
 | 
	
		
			
				|  |  | +        returned 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 exceptions.RpcError.
 | 
	
		
			
				|  |  |      """
 | 
	
		
			
				|  |  |      raise NotImplementedError()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -class EventValueInStreamOutMethod(object):
 | 
	
		
			
				|  |  | -  """A type for event-driven unary-request-stream-response RPC methods."""
 | 
	
		
			
				|  |  | -  __metaclass__ = abc.ABCMeta
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |    @abc.abstractmethod
 | 
	
		
			
				|  |  | -  def service(self, request, response_consumer, context):
 | 
	
		
			
				|  |  | -    """Services an RPC that accepts one value and produces a stream of values.
 | 
	
		
			
				|  |  | +  def event(self, response_callback, abortion_callback, timeout):
 | 
	
		
			
				|  |  | +    """Asynchronously invokes the underlying RPC.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      Args:
 | 
	
		
			
				|  |  | -      request: The single request value for the RPC.
 | 
	
		
			
				|  |  | -      response_consumer: A stream.Consumer to be called to accept the response
 | 
	
		
			
				|  |  | -        values of the RPC.
 | 
	
		
			
				|  |  | -      context: An RpcContext object.
 | 
	
		
			
				|  |  | +      request: The request value for the RPC.
 | 
	
		
			
				|  |  | +      response_callback: A callback to be called to accept the restponse value
 | 
	
		
			
				|  |  | +        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.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    Raises:
 | 
	
		
			
				|  |  | -      abandonment.Abandoned: May or may not be raised when the RPC has been
 | 
	
		
			
				|  |  | -        aborted.
 | 
	
		
			
				|  |  | +    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()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -class EventStreamInValueOutMethod(object):
 | 
	
		
			
				|  |  | -  """A type for event-driven stream-request-unary-response RPC methods."""
 | 
	
		
			
				|  |  | +class StreamStreamMultiCallable(object):
 | 
	
		
			
				|  |  | +  """Affords invoking a stream-stream RPC in any call style."""
 | 
	
		
			
				|  |  |    __metaclass__ = abc.ABCMeta
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    @abc.abstractmethod
 | 
	
		
			
				|  |  | -  def service(self, response_callback, context):
 | 
	
		
			
				|  |  | -    """Services an RPC that accepts a stream of values and produces one value.
 | 
	
		
			
				|  |  | +  def __call__(self, request_iterator, timeout):
 | 
	
		
			
				|  |  | +    """Synchronously invokes the underlying RPC.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      Args:
 | 
	
		
			
				|  |  | -      response_callback: A callback to be called to accept the response value of
 | 
	
		
			
				|  |  | -        the RPC.
 | 
	
		
			
				|  |  | -      context: An RpcContext object.
 | 
	
		
			
				|  |  | +      request_iterator: An iterator that yields request values for the RPC.
 | 
	
		
			
				|  |  | +      timeout: A duration of time in seconds to allow for the RPC.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      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.
 | 
	
		
			
				|  |  | +      A CancellableIterator that yields the response values of the RPC and
 | 
	
		
			
				|  |  | +        affords RPC cancellation. Drawing response values from the returned
 | 
	
		
			
				|  |  | +        CancellableIterator may raise exceptions.RpcError indicating abortion
 | 
	
		
			
				|  |  | +        of the RPC.
 | 
	
		
			
				|  |  |      """
 | 
	
		
			
				|  |  |      raise NotImplementedError()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -class EventStreamInStreamOutMethod(object):
 | 
	
		
			
				|  |  | -  """A type for event-driven stream-request-stream-response RPC methods."""
 | 
	
		
			
				|  |  | -  __metaclass__ = abc.ABCMeta
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |    @abc.abstractmethod
 | 
	
		
			
				|  |  | -  def service(self, response_consumer, context):
 | 
	
		
			
				|  |  | -    """Services an RPC that accepts and produces streams of values.
 | 
	
		
			
				|  |  | +  def event(self, response_consumer, abortion_callback, timeout):
 | 
	
		
			
				|  |  | +    """Asynchronously invokes the underlying RPC.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    Args:
 | 
	
		
			
				|  |  | -      response_consumer: A stream.Consumer to be called to accept the response
 | 
	
		
			
				|  |  | +l    Args:
 | 
	
		
			
				|  |  | +      response_consumer: A stream.Consumer to be called to accept the restponse
 | 
	
		
			
				|  |  |          values of the RPC.
 | 
	
		
			
				|  |  | -      context: An RpcContext object.
 | 
	
		
			
				|  |  | +      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.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      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.
 | 
	
		
			
				|  |  | +      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()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -class MultiMethod(object):
 | 
	
		
			
				|  |  | +class MethodImplementation(object):
 | 
	
		
			
				|  |  | +  """A sum type that describes an RPC method implementation.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  Attributes:
 | 
	
		
			
				|  |  | +    cardinality: A cardinality.Cardinality value.
 | 
	
		
			
				|  |  | +    style: A style.Service value.
 | 
	
		
			
				|  |  | +    unary_unary_inline: The implementation of the RPC method as a callable
 | 
	
		
			
				|  |  | +      value that takes a request value and an RpcContext 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 RPC method as a callable
 | 
	
		
			
				|  |  | +      value that takes a request value and an RpcContext 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 RPC method as a callable
 | 
	
		
			
				|  |  | +      value that takes an iterator of request values and an RpcContext 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 RPC method as a callable
 | 
	
		
			
				|  |  | +      value that takes an iterator of request values and an RpcContext 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 RPC method as a callable value
 | 
	
		
			
				|  |  | +      that takes a request value, a response callback to which to pass the
 | 
	
		
			
				|  |  | +      response value of the RPC, and an RpcContext. Only non-None if
 | 
	
		
			
				|  |  | +      cardinality is cardinality.Cardinality.UNARY_UNARY and style is
 | 
	
		
			
				|  |  | +      style.Service.EVENT.
 | 
	
		
			
				|  |  | +    unary_stream_event: The implementation of the RPC method as a callable
 | 
	
		
			
				|  |  | +      value that takes a request value, a stream.Consumer to which to pass the
 | 
	
		
			
				|  |  | +      the response values of the RPC, and an RpcContext. Only non-None if
 | 
	
		
			
				|  |  | +      cardinality is cardinality.Cardinality.UNARY_STREAM and style is
 | 
	
		
			
				|  |  | +      style.Service.EVENT.
 | 
	
		
			
				|  |  | +    stream_unary_event: The implementation of the RPC method as a callable
 | 
	
		
			
				|  |  | +      value that takes a response callback to which to pass the response value
 | 
	
		
			
				|  |  | +      of the RPC and an RpcContext 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 RPC method as a callable
 | 
	
		
			
				|  |  | +      value that takes a stream.Consumer to which to pass the response values
 | 
	
		
			
				|  |  | +      of the RPC and an RpcContext 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 RPC methods."""
 | 
	
		
			
				|  |  |    __metaclass__ = abc.ABCMeta
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -420,26 +381,7 @@ class MultiMethod(object):
 | 
	
		
			
				|  |  |      raise NotImplementedError()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -class Server(object):
 | 
	
		
			
				|  |  | -  """Specification of a running server that services RPCs."""
 | 
	
		
			
				|  |  | -  __metaclass__ = abc.ABCMeta
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -class Call(object):
 | 
	
		
			
				|  |  | -  """Invocation-side representation of an RPC.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  Attributes:
 | 
	
		
			
				|  |  | -    context: An RpcContext affording information about the RPC.
 | 
	
		
			
				|  |  | -  """
 | 
	
		
			
				|  |  | -  __metaclass__ = abc.ABCMeta
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  @abc.abstractmethod
 | 
	
		
			
				|  |  | -  def cancel(self):
 | 
	
		
			
				|  |  | -    """Requests cancellation of the RPC."""
 | 
	
		
			
				|  |  | -    raise NotImplementedError()
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -class Stub(object):
 | 
	
		
			
				|  |  | +class GenericStub(object):
 | 
	
		
			
				|  |  |    """Affords RPC methods to callers."""
 | 
	
		
			
				|  |  |    __metaclass__ = abc.ABCMeta
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -632,25 +574,67 @@ class Stub(object):
 | 
	
		
			
				|  |  |      raise NotImplementedError()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    @abc.abstractmethod
 | 
	
		
			
				|  |  | -  def unary_unary_sync_async(self, name):
 | 
	
		
			
				|  |  | -    """Creates a UnaryUnarySyncAsync value for a unary-unary RPC method.
 | 
	
		
			
				|  |  | +  def unary_unary_multi_callable(self, name):
 | 
	
		
			
				|  |  | +    """Creates a UnaryUnaryMultiCallable for a unary-unary RPC method.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    Args:
 | 
	
		
			
				|  |  | +      name: The RPC method name.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    Returns:
 | 
	
		
			
				|  |  | +      A UnaryUnaryMultiCallable value for the named unary-unary RPC method.
 | 
	
		
			
				|  |  | +    """
 | 
	
		
			
				|  |  | +    raise NotImplementedError()
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  @abc.abstractmethod
 | 
	
		
			
				|  |  | +  def unary_stream_multi_callable(self, name):
 | 
	
		
			
				|  |  | +    """Creates a UnaryStreamMultiCallable for a unary-stream RPC method.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      Args:
 | 
	
		
			
				|  |  |        name: The RPC method name.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      Returns:
 | 
	
		
			
				|  |  | -      A UnaryUnarySyncAsync value for the named unary-unary RPC method.
 | 
	
		
			
				|  |  | +      A UnaryStreamMultiCallable value for the name unary-stream RPC method.
 | 
	
		
			
				|  |  |      """
 | 
	
		
			
				|  |  |      raise NotImplementedError()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    @abc.abstractmethod
 | 
	
		
			
				|  |  | -  def stream_unary_sync_async(self, name):
 | 
	
		
			
				|  |  | -    """Creates a StreamUnarySyncAsync value for a stream-unary RPC method.
 | 
	
		
			
				|  |  | +  def stream_unary_multi_callable(self, name):
 | 
	
		
			
				|  |  | +    """Creates a StreamUnaryMultiCallable for a stream-unary RPC method.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      Args:
 | 
	
		
			
				|  |  |        name: The RPC method name.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      Returns:
 | 
	
		
			
				|  |  | -      A StreamUnarySyncAsync value for the named stream-unary RPC method.
 | 
	
		
			
				|  |  | +      A StreamUnaryMultiCallable value for the named stream-unary RPC method.
 | 
	
		
			
				|  |  |      """
 | 
	
		
			
				|  |  |      raise NotImplementedError()
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  @abc.abstractmethod
 | 
	
		
			
				|  |  | +  def stream_stream_multi_callable(self, name):
 | 
	
		
			
				|  |  | +    """Creates a StreamStreamMultiCallable for a stream-stream RPC method.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    Args:
 | 
	
		
			
				|  |  | +      name: The RPC method name.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    Returns:
 | 
	
		
			
				|  |  | +      A StreamStreamMultiCallable value for the named stream-stream RPC method.
 | 
	
		
			
				|  |  | +    """
 | 
	
		
			
				|  |  | +    raise NotImplementedError()
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +class DynamicStub(object):
 | 
	
		
			
				|  |  | +  """A stub with RPC-method-bound multi-callable attributes.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  Instances of this type responsd to attribute access as follows: if the
 | 
	
		
			
				|  |  | +  requested attribute is the name of a unary-unary RPC method, the value of the
 | 
	
		
			
				|  |  | +  attribute will be a UnaryUnaryMultiCallable with which to invoke the RPC
 | 
	
		
			
				|  |  | +  method; if the requested attribute is the name of a unary-stream RPC method,
 | 
	
		
			
				|  |  | +  the value of the attribute will be a UnaryStreamMultiCallable with which to
 | 
	
		
			
				|  |  | +  invoke the RPC method; if the requested attribute is the name of a
 | 
	
		
			
				|  |  | +  stream-unary RPC method, the value of the attribute will be a
 | 
	
		
			
				|  |  | +  StreamUnaryMultiCallable with which to invoke the RPC method; and if the
 | 
	
		
			
				|  |  | +  requested attribute is the name of a stream-stream RPC method, the value of
 | 
	
		
			
				|  |  | +  the attribute will be a StreamStreamMultiCallable with which to invoke the
 | 
	
		
			
				|  |  | +  RPC method.
 | 
	
		
			
				|  |  | +  """
 | 
	
		
			
				|  |  | +  __metaclass__ = abc.ABCMeta
 |