|  | @@ -4,7 +4,8 @@
 | 
	
		
			
				|  |  |  <html lang="en">
 | 
	
		
			
				|  |  |    <head>
 | 
	
		
			
				|  |  |      <meta charset="utf-8" />
 | 
	
		
			
				|  |  | -    <title>grpc.experimental.aio._interceptor — gRPC Python 1.29.0 documentation</title>
 | 
	
		
			
				|  |  | +    <meta name="viewport" content="width=device-width, initial-scale=1.0">
 | 
	
		
			
				|  |  | +    <title>grpc.experimental.aio._interceptor — gRPC Python 1.31.0 documentation</title>
 | 
	
		
			
				|  |  |      <link rel="stylesheet" href="../../../../_static/alabaster.css" type="text/css" />
 | 
	
		
			
				|  |  |      <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
 | 
	
		
			
				|  |  |      <script id="documentation_options" data-url_root="../../../../" src="../../../../_static/documentation_options.js"></script>
 | 
	
	
		
			
				|  | @@ -29,7 +30,7 @@
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -<p class="blurb">1.29.0</p>
 | 
	
		
			
				|  |  | +<p class="blurb">1.31.0</p>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -105,16 +106,20 @@
 | 
	
		
			
				|  |  |  <span class="kn">import</span> <span class="nn">collections</span>
 | 
	
		
			
				|  |  |  <span class="kn">import</span> <span class="nn">functools</span>
 | 
	
		
			
				|  |  |  <span class="kn">from</span> <span class="nn">abc</span> <span class="kn">import</span> <span class="n">ABCMeta</span><span class="p">,</span> <span class="n">abstractmethod</span>
 | 
	
		
			
				|  |  | -<span class="kn">from</span> <span class="nn">typing</span> <span class="kn">import</span> <span class="n">Callable</span><span class="p">,</span> <span class="n">Optional</span><span class="p">,</span> <span class="n">Iterator</span><span class="p">,</span> <span class="n">Sequence</span><span class="p">,</span> <span class="n">Union</span><span class="p">,</span> <span class="n">Awaitable</span>
 | 
	
		
			
				|  |  | +<span class="kn">from</span> <span class="nn">typing</span> <span class="kn">import</span> <span class="n">Callable</span><span class="p">,</span> <span class="n">Optional</span><span class="p">,</span> <span class="n">Iterator</span><span class="p">,</span> <span class="n">Sequence</span><span class="p">,</span> <span class="n">Union</span><span class="p">,</span> <span class="n">Awaitable</span><span class="p">,</span> <span class="n">AsyncIterable</span>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  <span class="kn">import</span> <span class="nn">grpc</span>
 | 
	
		
			
				|  |  |  <span class="kn">from</span> <span class="nn">grpc._cython</span> <span class="kn">import</span> <span class="n">cygrpc</span>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  <span class="kn">from</span> <span class="nn">.</span> <span class="kn">import</span> <span class="n">_base_call</span>
 | 
	
		
			
				|  |  | -<span class="kn">from</span> <span class="nn">._call</span> <span class="kn">import</span> <span class="n">UnaryUnaryCall</span><span class="p">,</span> <span class="n">AioRpcError</span>
 | 
	
		
			
				|  |  | +<span class="kn">from</span> <span class="nn">._call</span> <span class="kn">import</span> <span class="n">UnaryUnaryCall</span><span class="p">,</span> <span class="n">UnaryStreamCall</span><span class="p">,</span> <span class="n">StreamUnaryCall</span><span class="p">,</span> <span class="n">StreamStreamCall</span><span class="p">,</span> <span class="n">AioRpcError</span>
 | 
	
		
			
				|  |  | +<span class="kn">from</span> <span class="nn">._call</span> <span class="kn">import</span> <span class="n">_RPC_ALREADY_FINISHED_DETAILS</span><span class="p">,</span> <span class="n">_RPC_HALF_CLOSED_DETAILS</span>
 | 
	
		
			
				|  |  | +<span class="kn">from</span> <span class="nn">._call</span> <span class="kn">import</span> <span class="n">_API_STYLE_ERROR</span>
 | 
	
		
			
				|  |  |  <span class="kn">from</span> <span class="nn">._utils</span> <span class="kn">import</span> <span class="n">_timeout_to_deadline</span>
 | 
	
		
			
				|  |  |  <span class="kn">from</span> <span class="nn">._typing</span> <span class="kn">import</span> <span class="p">(</span><span class="n">RequestType</span><span class="p">,</span> <span class="n">SerializingFunction</span><span class="p">,</span> <span class="n">DeserializingFunction</span><span class="p">,</span>
 | 
	
		
			
				|  |  | -                      <span class="n">MetadataType</span><span class="p">,</span> <span class="n">ResponseType</span><span class="p">,</span> <span class="n">DoneCallbackType</span><span class="p">)</span>
 | 
	
		
			
				|  |  | +                      <span class="n">ResponseType</span><span class="p">,</span> <span class="n">DoneCallbackType</span><span class="p">,</span> <span class="n">RequestIterableType</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                      <span class="n">ResponseIterableType</span><span class="p">)</span>
 | 
	
		
			
				|  |  | +<span class="kn">from</span> <span class="nn">._metadata</span> <span class="kn">import</span> <span class="n">Metadata</span>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  <span class="n">_LOCAL_CANCELLATION_DETAILS</span> <span class="o">=</span> <span class="s1">'Locally cancelled by application!'</span>
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -162,18 +167,22 @@
 | 
	
		
			
				|  |  |  <span class="sd">        metadata: Optional metadata to be transmitted to the service-side of</span>
 | 
	
		
			
				|  |  |  <span class="sd">          the RPC.</span>
 | 
	
		
			
				|  |  |  <span class="sd">        credentials: An optional CallCredentials for the RPC.</span>
 | 
	
		
			
				|  |  | -<span class="sd">        wait_for_ready: This is an EXPERIMENTAL argument. An optional flag to</span>
 | 
	
		
			
				|  |  | -<span class="sd">          enable wait for ready mechanism.</span>
 | 
	
		
			
				|  |  | +<span class="sd">        wait_for_ready: This is an EXPERIMENTAL argument. An optional</span>
 | 
	
		
			
				|  |  | +<span class="sd">            flag to enable :term:`wait_for_ready` mechanism.</span>
 | 
	
		
			
				|  |  |  <span class="sd">    """</span>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      <span class="n">method</span><span class="p">:</span> <span class="nb">str</span>
 | 
	
		
			
				|  |  |      <span class="n">timeout</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">float</span><span class="p">]</span>
 | 
	
		
			
				|  |  | -    <span class="n">metadata</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">MetadataType</span><span class="p">]</span>
 | 
	
		
			
				|  |  | +    <span class="n">metadata</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Metadata</span><span class="p">]</span>
 | 
	
		
			
				|  |  |      <span class="n">credentials</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">grpc</span><span class="o">.</span><span class="n">CallCredentials</span><span class="p">]</span>
 | 
	
		
			
				|  |  |      <span class="n">wait_for_ready</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span></div>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -<div class="viewcode-block" id="UnaryUnaryClientInterceptor"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.UnaryUnaryClientInterceptor">[docs]</a><span class="k">class</span> <span class="nc">UnaryUnaryClientInterceptor</span><span class="p">(</span><span class="n">metaclass</span><span class="o">=</span><span class="n">ABCMeta</span><span class="p">):</span>
 | 
	
		
			
				|  |  | +<span class="k">class</span> <span class="nc">ClientInterceptor</span><span class="p">(</span><span class="n">metaclass</span><span class="o">=</span><span class="n">ABCMeta</span><span class="p">):</span>
 | 
	
		
			
				|  |  | +    <span class="sd">"""Base class used for all Aio Client Interceptor classes"""</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +<div class="viewcode-block" id="UnaryUnaryClientInterceptor"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.UnaryUnaryClientInterceptor">[docs]</a><span class="k">class</span> <span class="nc">UnaryUnaryClientInterceptor</span><span class="p">(</span><span class="n">ClientInterceptor</span><span class="p">,</span> <span class="n">metaclass</span><span class="o">=</span><span class="n">ABCMeta</span><span class="p">):</span>
 | 
	
		
			
				|  |  |      <span class="sd">"""Affords intercepting unary-unary invocations."""</span>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  <div class="viewcode-block" id="UnaryUnaryClientInterceptor.intercept_unary_unary"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.UnaryUnaryClientInterceptor.intercept_unary_unary">[docs]</a>    <span class="nd">@abstractmethod</span>
 | 
	
	
		
			
				|  | @@ -186,12 +195,12 @@
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  <span class="sd">        Args:</span>
 | 
	
		
			
				|  |  |  <span class="sd">          continuation: A coroutine that proceeds with the invocation by</span>
 | 
	
		
			
				|  |  | -<span class="sd">            executing the next interceptor in chain or invoking the</span>
 | 
	
		
			
				|  |  | +<span class="sd">            executing the next interceptor in the chain or invoking the</span>
 | 
	
		
			
				|  |  |  <span class="sd">            actual RPC on the underlying Channel. It is the interceptor's</span>
 | 
	
		
			
				|  |  |  <span class="sd">            responsibility to call it if it decides to move the RPC forward.</span>
 | 
	
		
			
				|  |  |  <span class="sd">            The interceptor can use</span>
 | 
	
		
			
				|  |  | -<span class="sd">            `response_future = await continuation(client_call_details, request)`</span>
 | 
	
		
			
				|  |  | -<span class="sd">            to continue with the RPC. `continuation` returns the response of the</span>
 | 
	
		
			
				|  |  | +<span class="sd">            `call = await continuation(client_call_details, request)`</span>
 | 
	
		
			
				|  |  | +<span class="sd">            to continue with the RPC. `continuation` returns the call to the</span>
 | 
	
		
			
				|  |  |  <span class="sd">            RPC.</span>
 | 
	
		
			
				|  |  |  <span class="sd">          client_call_details: A ClientCallDetails object describing the</span>
 | 
	
		
			
				|  |  |  <span class="sd">            outgoing RPC.</span>
 | 
	
	
		
			
				|  | @@ -206,8 +215,131 @@
 | 
	
		
			
				|  |  |  <span class="sd">        """</span></div></div>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -<div class="viewcode-block" id="InterceptedUnaryUnaryCall"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.InterceptedUnaryUnaryCall">[docs]</a><span class="k">class</span> <span class="nc">InterceptedUnaryUnaryCall</span><span class="p">(</span><span class="n">_base_call</span><span class="o">.</span><span class="n">UnaryUnaryCall</span><span class="p">):</span>
 | 
	
		
			
				|  |  | -    <span class="sd">"""Used for running a `UnaryUnaryCall` wrapped by interceptors.</span>
 | 
	
		
			
				|  |  | +<span class="k">class</span> <span class="nc">UnaryStreamClientInterceptor</span><span class="p">(</span><span class="n">ClientInterceptor</span><span class="p">,</span> <span class="n">metaclass</span><span class="o">=</span><span class="n">ABCMeta</span><span class="p">):</span>
 | 
	
		
			
				|  |  | +    <span class="sd">"""Affords intercepting unary-stream invocations."""</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    <span class="nd">@abstractmethod</span>
 | 
	
		
			
				|  |  | +    <span class="k">async</span> <span class="k">def</span> <span class="nf">intercept_unary_stream</span><span class="p">(</span>
 | 
	
		
			
				|  |  | +            <span class="bp">self</span><span class="p">,</span> <span class="n">continuation</span><span class="p">:</span> <span class="n">Callable</span><span class="p">[[</span><span class="n">ClientCallDetails</span><span class="p">,</span> <span class="n">RequestType</span><span class="p">],</span>
 | 
	
		
			
				|  |  | +                                         <span class="n">UnaryStreamCall</span><span class="p">],</span>
 | 
	
		
			
				|  |  | +            <span class="n">client_call_details</span><span class="p">:</span> <span class="n">ClientCallDetails</span><span class="p">,</span> <span class="n">request</span><span class="p">:</span> <span class="n">RequestType</span>
 | 
	
		
			
				|  |  | +    <span class="p">)</span> <span class="o">-></span> <span class="n">Union</span><span class="p">[</span><span class="n">ResponseIterableType</span><span class="p">,</span> <span class="n">UnaryStreamCall</span><span class="p">]:</span>
 | 
	
		
			
				|  |  | +        <span class="sd">"""Intercepts a unary-stream invocation asynchronously.</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +<span class="sd">        The function could return the call object or an asynchronous</span>
 | 
	
		
			
				|  |  | +<span class="sd">        iterator, in case of being an asyncrhonous iterator this will</span>
 | 
	
		
			
				|  |  | +<span class="sd">        become the source of the reads done by the caller.</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +<span class="sd">        Args:</span>
 | 
	
		
			
				|  |  | +<span class="sd">          continuation: A coroutine that proceeds with the invocation by</span>
 | 
	
		
			
				|  |  | +<span class="sd">            executing the next interceptor in the chain or invoking the</span>
 | 
	
		
			
				|  |  | +<span class="sd">            actual RPC on the underlying Channel. It is the interceptor's</span>
 | 
	
		
			
				|  |  | +<span class="sd">            responsibility to call it if it decides to move the RPC forward.</span>
 | 
	
		
			
				|  |  | +<span class="sd">            The interceptor can use</span>
 | 
	
		
			
				|  |  | +<span class="sd">            `call = await continuation(client_call_details, request)`</span>
 | 
	
		
			
				|  |  | +<span class="sd">            to continue with the RPC. `continuation` returns the call to the</span>
 | 
	
		
			
				|  |  | +<span class="sd">            RPC.</span>
 | 
	
		
			
				|  |  | +<span class="sd">          client_call_details: A ClientCallDetails object describing the</span>
 | 
	
		
			
				|  |  | +<span class="sd">            outgoing RPC.</span>
 | 
	
		
			
				|  |  | +<span class="sd">          request: The request value for the RPC.</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +<span class="sd">        Returns:</span>
 | 
	
		
			
				|  |  | +<span class="sd">          The RPC Call or an asynchronous iterator.</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +<span class="sd">        Raises:</span>
 | 
	
		
			
				|  |  | +<span class="sd">          AioRpcError: Indicating that the RPC terminated with non-OK status.</span>
 | 
	
		
			
				|  |  | +<span class="sd">          asyncio.CancelledError: Indicating that the RPC was canceled.</span>
 | 
	
		
			
				|  |  | +<span class="sd">        """</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +<span class="k">class</span> <span class="nc">StreamUnaryClientInterceptor</span><span class="p">(</span><span class="n">ClientInterceptor</span><span class="p">,</span> <span class="n">metaclass</span><span class="o">=</span><span class="n">ABCMeta</span><span class="p">):</span>
 | 
	
		
			
				|  |  | +    <span class="sd">"""Affords intercepting stream-unary invocations."""</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    <span class="nd">@abstractmethod</span>
 | 
	
		
			
				|  |  | +    <span class="k">async</span> <span class="k">def</span> <span class="nf">intercept_stream_unary</span><span class="p">(</span>
 | 
	
		
			
				|  |  | +            <span class="bp">self</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +            <span class="n">continuation</span><span class="p">:</span> <span class="n">Callable</span><span class="p">[[</span><span class="n">ClientCallDetails</span><span class="p">,</span> <span class="n">RequestType</span><span class="p">],</span>
 | 
	
		
			
				|  |  | +                                   <span class="n">UnaryStreamCall</span><span class="p">],</span>
 | 
	
		
			
				|  |  | +            <span class="n">client_call_details</span><span class="p">:</span> <span class="n">ClientCallDetails</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +            <span class="n">request_iterator</span><span class="p">:</span> <span class="n">RequestIterableType</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +    <span class="p">)</span> <span class="o">-></span> <span class="n">StreamUnaryCall</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +        <span class="sd">"""Intercepts a stream-unary invocation asynchronously.</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +<span class="sd">        Within the interceptor the usage of the call methods like `write` or</span>
 | 
	
		
			
				|  |  | +<span class="sd">        even awaiting the call should be done carefully, since the caller</span>
 | 
	
		
			
				|  |  | +<span class="sd">        could be expecting an untouched call, for example for start writing</span>
 | 
	
		
			
				|  |  | +<span class="sd">        messages to it.</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +<span class="sd">        Args:</span>
 | 
	
		
			
				|  |  | +<span class="sd">          continuation: A coroutine that proceeds with the invocation by</span>
 | 
	
		
			
				|  |  | +<span class="sd">            executing the next interceptor in the chain or invoking the</span>
 | 
	
		
			
				|  |  | +<span class="sd">            actual RPC on the underlying Channel. It is the interceptor's</span>
 | 
	
		
			
				|  |  | +<span class="sd">            responsibility to call it if it decides to move the RPC forward.</span>
 | 
	
		
			
				|  |  | +<span class="sd">            The interceptor can use</span>
 | 
	
		
			
				|  |  | +<span class="sd">            `call = await continuation(client_call_details, request_iterator)`</span>
 | 
	
		
			
				|  |  | +<span class="sd">            to continue with the RPC. `continuation` returns the call to the</span>
 | 
	
		
			
				|  |  | +<span class="sd">            RPC.</span>
 | 
	
		
			
				|  |  | +<span class="sd">          client_call_details: A ClientCallDetails object describing the</span>
 | 
	
		
			
				|  |  | +<span class="sd">            outgoing RPC.</span>
 | 
	
		
			
				|  |  | +<span class="sd">          request_iterator: The request iterator that will produce requests</span>
 | 
	
		
			
				|  |  | +<span class="sd">            for the RPC.</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +<span class="sd">        Returns:</span>
 | 
	
		
			
				|  |  | +<span class="sd">          The RPC Call.</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +<span class="sd">        Raises:</span>
 | 
	
		
			
				|  |  | +<span class="sd">          AioRpcError: Indicating that the RPC terminated with non-OK status.</span>
 | 
	
		
			
				|  |  | +<span class="sd">          asyncio.CancelledError: Indicating that the RPC was canceled.</span>
 | 
	
		
			
				|  |  | +<span class="sd">        """</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +<span class="k">class</span> <span class="nc">StreamStreamClientInterceptor</span><span class="p">(</span><span class="n">ClientInterceptor</span><span class="p">,</span> <span class="n">metaclass</span><span class="o">=</span><span class="n">ABCMeta</span><span class="p">):</span>
 | 
	
		
			
				|  |  | +    <span class="sd">"""Affords intercepting stream-stream invocations."""</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    <span class="nd">@abstractmethod</span>
 | 
	
		
			
				|  |  | +    <span class="k">async</span> <span class="k">def</span> <span class="nf">intercept_stream_stream</span><span class="p">(</span>
 | 
	
		
			
				|  |  | +            <span class="bp">self</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +            <span class="n">continuation</span><span class="p">:</span> <span class="n">Callable</span><span class="p">[[</span><span class="n">ClientCallDetails</span><span class="p">,</span> <span class="n">RequestType</span><span class="p">],</span>
 | 
	
		
			
				|  |  | +                                   <span class="n">UnaryStreamCall</span><span class="p">],</span>
 | 
	
		
			
				|  |  | +            <span class="n">client_call_details</span><span class="p">:</span> <span class="n">ClientCallDetails</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +            <span class="n">request_iterator</span><span class="p">:</span> <span class="n">RequestIterableType</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +    <span class="p">)</span> <span class="o">-></span> <span class="n">Union</span><span class="p">[</span><span class="n">ResponseIterableType</span><span class="p">,</span> <span class="n">StreamStreamCall</span><span class="p">]:</span>
 | 
	
		
			
				|  |  | +        <span class="sd">"""Intercepts a stream-stream invocation asynchronously.</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +<span class="sd">        Within the interceptor the usage of the call methods like `write` or</span>
 | 
	
		
			
				|  |  | +<span class="sd">        even awaiting the call should be done carefully, since the caller</span>
 | 
	
		
			
				|  |  | +<span class="sd">        could be expecting an untouched call, for example for start writing</span>
 | 
	
		
			
				|  |  | +<span class="sd">        messages to it.</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +<span class="sd">        The function could return the call object or an asynchronous</span>
 | 
	
		
			
				|  |  | +<span class="sd">        iterator, in case of being an asyncrhonous iterator this will</span>
 | 
	
		
			
				|  |  | +<span class="sd">        become the source of the reads done by the caller.</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +<span class="sd">        Args:</span>
 | 
	
		
			
				|  |  | +<span class="sd">          continuation: A coroutine that proceeds with the invocation by</span>
 | 
	
		
			
				|  |  | +<span class="sd">            executing the next interceptor in the chain or invoking the</span>
 | 
	
		
			
				|  |  | +<span class="sd">            actual RPC on the underlying Channel. It is the interceptor's</span>
 | 
	
		
			
				|  |  | +<span class="sd">            responsibility to call it if it decides to move the RPC forward.</span>
 | 
	
		
			
				|  |  | +<span class="sd">            The interceptor can use</span>
 | 
	
		
			
				|  |  | +<span class="sd">            `call = await continuation(client_call_details, request_iterator)`</span>
 | 
	
		
			
				|  |  | +<span class="sd">            to continue with the RPC. `continuation` returns the call to the</span>
 | 
	
		
			
				|  |  | +<span class="sd">            RPC.</span>
 | 
	
		
			
				|  |  | +<span class="sd">          client_call_details: A ClientCallDetails object describing the</span>
 | 
	
		
			
				|  |  | +<span class="sd">            outgoing RPC.</span>
 | 
	
		
			
				|  |  | +<span class="sd">          request_iterator: The request iterator that will produce requests</span>
 | 
	
		
			
				|  |  | +<span class="sd">            for the RPC.</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +<span class="sd">        Returns:</span>
 | 
	
		
			
				|  |  | +<span class="sd">          The RPC Call or an asynchronous iterator.</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +<span class="sd">        Raises:</span>
 | 
	
		
			
				|  |  | +<span class="sd">          AioRpcError: Indicating that the RPC terminated with non-OK status.</span>
 | 
	
		
			
				|  |  | +<span class="sd">          asyncio.CancelledError: Indicating that the RPC was canceled.</span>
 | 
	
		
			
				|  |  | +<span class="sd">        """</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +<span class="k">class</span> <span class="nc">InterceptedCall</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +    <span class="sd">"""Base implementation for all intercepted call arities.</span>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  <span class="sd">    Interceptors might have some work to do before the RPC invocation with</span>
 | 
	
		
			
				|  |  |  <span class="sd">    the capacity of changing the invocation parameters, and some work to do</span>
 | 
	
	
		
			
				|  | @@ -222,105 +354,70 @@
 | 
	
		
			
				|  |  |  <span class="sd">    intercepted call, being at the same time the same call returned to the</span>
 | 
	
		
			
				|  |  |  <span class="sd">    interceptors.</span>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -<span class="sd">    For most of the methods, like `initial_metadata()` the caller does not need</span>
 | 
	
		
			
				|  |  | -<span class="sd">    to wait until the interceptors task is finished, once the RPC is done the</span>
 | 
	
		
			
				|  |  | -<span class="sd">    caller will have the freedom for accessing to the results.</span>
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -<span class="sd">    For the `__await__` method is it is proxied to the intercepted call only when</span>
 | 
	
		
			
				|  |  | -<span class="sd">    the interceptor task is finished.</span>
 | 
	
		
			
				|  |  | +<span class="sd">    As a base class for all of the interceptors implements the logic around</span>
 | 
	
		
			
				|  |  | +<span class="sd">    final status, metadata and cancellation.</span>
 | 
	
		
			
				|  |  |  <span class="sd">    """</span>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    <span class="n">_loop</span><span class="p">:</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">AbstractEventLoop</span>
 | 
	
		
			
				|  |  | -    <span class="n">_channel</span><span class="p">:</span> <span class="n">cygrpc</span><span class="o">.</span><span class="n">AioChannel</span>
 | 
	
		
			
				|  |  | -    <span class="n">_cancelled_before_rpc</span><span class="p">:</span> <span class="nb">bool</span>
 | 
	
		
			
				|  |  | -    <span class="n">_intercepted_call</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">_base_call</span><span class="o">.</span><span class="n">UnaryUnaryCall</span><span class="p">]</span>
 | 
	
		
			
				|  |  | -    <span class="n">_intercepted_call_created</span><span class="p">:</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">Event</span>
 | 
	
		
			
				|  |  |      <span class="n">_interceptors_task</span><span class="p">:</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">Task</span>
 | 
	
		
			
				|  |  |      <span class="n">_pending_add_done_callbacks</span><span class="p">:</span> <span class="n">Sequence</span><span class="p">[</span><span class="n">DoneCallbackType</span><span class="p">]</span>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    <span class="c1"># pylint: disable=too-many-arguments</span>
 | 
	
		
			
				|  |  | -    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">interceptors</span><span class="p">:</span> <span class="n">Sequence</span><span class="p">[</span><span class="n">UnaryUnaryClientInterceptor</span><span class="p">],</span>
 | 
	
		
			
				|  |  | -                 <span class="n">request</span><span class="p">:</span> <span class="n">RequestType</span><span class="p">,</span> <span class="n">timeout</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">float</span><span class="p">],</span>
 | 
	
		
			
				|  |  | -                 <span class="n">metadata</span><span class="p">:</span> <span class="n">MetadataType</span><span class="p">,</span>
 | 
	
		
			
				|  |  | -                 <span class="n">credentials</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">grpc</span><span class="o">.</span><span class="n">CallCredentials</span><span class="p">],</span>
 | 
	
		
			
				|  |  | -                 <span class="n">wait_for_ready</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">],</span> <span class="n">channel</span><span class="p">:</span> <span class="n">cygrpc</span><span class="o">.</span><span class="n">AioChannel</span><span class="p">,</span>
 | 
	
		
			
				|  |  | -                 <span class="n">method</span><span class="p">:</span> <span class="nb">bytes</span><span class="p">,</span> <span class="n">request_serializer</span><span class="p">:</span> <span class="n">SerializingFunction</span><span class="p">,</span>
 | 
	
		
			
				|  |  | -                 <span class="n">response_deserializer</span><span class="p">:</span> <span class="n">DeserializingFunction</span><span class="p">,</span>
 | 
	
		
			
				|  |  | -                 <span class="n">loop</span><span class="p">:</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">AbstractEventLoop</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
 | 
	
		
			
				|  |  | -        <span class="bp">self</span><span class="o">.</span><span class="n">_channel</span> <span class="o">=</span> <span class="n">channel</span>
 | 
	
		
			
				|  |  | -        <span class="bp">self</span><span class="o">.</span><span class="n">_loop</span> <span class="o">=</span> <span class="n">loop</span>
 | 
	
		
			
				|  |  | -        <span class="bp">self</span><span class="o">.</span><span class="n">_interceptors_task</span> <span class="o">=</span> <span class="n">loop</span><span class="o">.</span><span class="n">create_task</span><span class="p">(</span>
 | 
	
		
			
				|  |  | -            <span class="bp">self</span><span class="o">.</span><span class="n">_invoke</span><span class="p">(</span><span class="n">interceptors</span><span class="p">,</span> <span class="n">method</span><span class="p">,</span> <span class="n">timeout</span><span class="p">,</span> <span class="n">metadata</span><span class="p">,</span> <span class="n">credentials</span><span class="p">,</span>
 | 
	
		
			
				|  |  | -                         <span class="n">wait_for_ready</span><span class="p">,</span> <span class="n">request</span><span class="p">,</span> <span class="n">request_serializer</span><span class="p">,</span>
 | 
	
		
			
				|  |  | -                         <span class="n">response_deserializer</span><span class="p">))</span>
 | 
	
		
			
				|  |  | +    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">interceptors_task</span><span class="p">:</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">Task</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +        <span class="bp">self</span><span class="o">.</span><span class="n">_interceptors_task</span> <span class="o">=</span> <span class="n">interceptors_task</span>
 | 
	
		
			
				|  |  |          <span class="bp">self</span><span class="o">.</span><span class="n">_pending_add_done_callbacks</span> <span class="o">=</span> <span class="p">[]</span>
 | 
	
		
			
				|  |  |          <span class="bp">self</span><span class="o">.</span><span class="n">_interceptors_task</span><span class="o">.</span><span class="n">add_done_callback</span><span class="p">(</span>
 | 
	
		
			
				|  |  | -            <span class="bp">self</span><span class="o">.</span><span class="n">_fire_pending_add_done_callbacks</span><span class="p">)</span>
 | 
	
		
			
				|  |  | +            <span class="bp">self</span><span class="o">.</span><span class="n">_fire_or_add_pending_done_callbacks</span><span class="p">)</span>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      <span class="k">def</span> <span class="fm">__del__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
 | 
	
		
			
				|  |  |          <span class="bp">self</span><span class="o">.</span><span class="n">cancel</span><span class="p">()</span>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    <span class="c1"># pylint: disable=too-many-arguments</span>
 | 
	
		
			
				|  |  | -    <span class="k">async</span> <span class="k">def</span> <span class="nf">_invoke</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">interceptors</span><span class="p">:</span> <span class="n">Sequence</span><span class="p">[</span><span class="n">UnaryUnaryClientInterceptor</span><span class="p">],</span>
 | 
	
		
			
				|  |  | -                      <span class="n">method</span><span class="p">:</span> <span class="nb">bytes</span><span class="p">,</span> <span class="n">timeout</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">float</span><span class="p">],</span>
 | 
	
		
			
				|  |  | -                      <span class="n">metadata</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">MetadataType</span><span class="p">],</span>
 | 
	
		
			
				|  |  | -                      <span class="n">credentials</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">grpc</span><span class="o">.</span><span class="n">CallCredentials</span><span class="p">],</span>
 | 
	
		
			
				|  |  | -                      <span class="n">wait_for_ready</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">],</span> <span class="n">request</span><span class="p">:</span> <span class="n">RequestType</span><span class="p">,</span>
 | 
	
		
			
				|  |  | -                      <span class="n">request_serializer</span><span class="p">:</span> <span class="n">SerializingFunction</span><span class="p">,</span>
 | 
	
		
			
				|  |  | -                      <span class="n">response_deserializer</span><span class="p">:</span> <span class="n">DeserializingFunction</span>
 | 
	
		
			
				|  |  | -                     <span class="p">)</span> <span class="o">-></span> <span class="n">UnaryUnaryCall</span><span class="p">:</span>
 | 
	
		
			
				|  |  | -        <span class="sd">"""Run the RPC call wrapped in interceptors"""</span>
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        <span class="k">async</span> <span class="k">def</span> <span class="nf">_run_interceptor</span><span class="p">(</span>
 | 
	
		
			
				|  |  | -                <span class="n">interceptors</span><span class="p">:</span> <span class="n">Iterator</span><span class="p">[</span><span class="n">UnaryUnaryClientInterceptor</span><span class="p">],</span>
 | 
	
		
			
				|  |  | -                <span class="n">client_call_details</span><span class="p">:</span> <span class="n">ClientCallDetails</span><span class="p">,</span>
 | 
	
		
			
				|  |  | -                <span class="n">request</span><span class="p">:</span> <span class="n">RequestType</span><span class="p">)</span> <span class="o">-></span> <span class="n">_base_call</span><span class="o">.</span><span class="n">UnaryUnaryCall</span><span class="p">:</span>
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            <span class="n">interceptor</span> <span class="o">=</span> <span class="nb">next</span><span class="p">(</span><span class="n">interceptors</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            <span class="k">if</span> <span class="n">interceptor</span><span class="p">:</span>
 | 
	
		
			
				|  |  | -                <span class="n">continuation</span> <span class="o">=</span> <span class="n">functools</span><span class="o">.</span><span class="n">partial</span><span class="p">(</span><span class="n">_run_interceptor</span><span class="p">,</span> <span class="n">interceptors</span><span class="p">)</span>
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                <span class="n">call_or_response</span> <span class="o">=</span> <span class="k">await</span> <span class="n">interceptor</span><span class="o">.</span><span class="n">intercept_unary_unary</span><span class="p">(</span>
 | 
	
		
			
				|  |  | -                    <span class="n">continuation</span><span class="p">,</span> <span class="n">client_call_details</span><span class="p">,</span> <span class="n">request</span><span class="p">)</span>
 | 
	
		
			
				|  |  | +    <span class="k">def</span> <span class="nf">_fire_or_add_pending_done_callbacks</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                                            <span class="n">interceptors_task</span><span class="p">:</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">Task</span>
 | 
	
		
			
				|  |  | +                                           <span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">call_or_response</span><span class="p">,</span> <span class="n">_base_call</span><span class="o">.</span><span class="n">UnaryUnaryCall</span><span class="p">):</span>
 | 
	
		
			
				|  |  | -                    <span class="k">return</span> <span class="n">call_or_response</span>
 | 
	
		
			
				|  |  | -                <span class="k">else</span><span class="p">:</span>
 | 
	
		
			
				|  |  | -                    <span class="k">return</span> <span class="n">UnaryUnaryCallResponse</span><span class="p">(</span><span class="n">call_or_response</span><span class="p">)</span>
 | 
	
		
			
				|  |  | +        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pending_add_done_callbacks</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +            <span class="k">return</span>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            <span class="k">else</span><span class="p">:</span>
 | 
	
		
			
				|  |  | -                <span class="k">return</span> <span class="n">UnaryUnaryCall</span><span class="p">(</span>
 | 
	
		
			
				|  |  | -                    <span class="n">request</span><span class="p">,</span> <span class="n">_timeout_to_deadline</span><span class="p">(</span><span class="n">client_call_details</span><span class="o">.</span><span class="n">timeout</span><span class="p">),</span>
 | 
	
		
			
				|  |  | -                    <span class="n">client_call_details</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span>
 | 
	
		
			
				|  |  | -                    <span class="n">client_call_details</span><span class="o">.</span><span class="n">credentials</span><span class="p">,</span>
 | 
	
		
			
				|  |  | -                    <span class="n">client_call_details</span><span class="o">.</span><span class="n">wait_for_ready</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_channel</span><span class="p">,</span>
 | 
	
		
			
				|  |  | -                    <span class="n">client_call_details</span><span class="o">.</span><span class="n">method</span><span class="p">,</span> <span class="n">request_serializer</span><span class="p">,</span>
 | 
	
		
			
				|  |  | -                    <span class="n">response_deserializer</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_loop</span><span class="p">)</span>
 | 
	
		
			
				|  |  | +        <span class="n">call_completed</span> <span class="o">=</span> <span class="kc">False</span>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        <span class="n">client_call_details</span> <span class="o">=</span> <span class="n">ClientCallDetails</span><span class="p">(</span><span class="n">method</span><span class="p">,</span> <span class="n">timeout</span><span class="p">,</span> <span class="n">metadata</span><span class="p">,</span>
 | 
	
		
			
				|  |  | -                                                <span class="n">credentials</span><span class="p">,</span> <span class="n">wait_for_ready</span><span class="p">)</span>
 | 
	
		
			
				|  |  | -        <span class="k">return</span> <span class="k">await</span> <span class="n">_run_interceptor</span><span class="p">(</span><span class="nb">iter</span><span class="p">(</span><span class="n">interceptors</span><span class="p">),</span> <span class="n">client_call_details</span><span class="p">,</span>
 | 
	
		
			
				|  |  | -                                      <span class="n">request</span><span class="p">)</span>
 | 
	
		
			
				|  |  | +        <span class="k">try</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +            <span class="n">call</span> <span class="o">=</span> <span class="n">interceptors_task</span><span class="o">.</span><span class="n">result</span><span class="p">()</span>
 | 
	
		
			
				|  |  | +            <span class="k">if</span> <span class="n">call</span><span class="o">.</span><span class="n">done</span><span class="p">():</span>
 | 
	
		
			
				|  |  | +                <span class="n">call_completed</span> <span class="o">=</span> <span class="kc">True</span>
 | 
	
		
			
				|  |  | +        <span class="k">except</span> <span class="p">(</span><span class="n">AioRpcError</span><span class="p">,</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">CancelledError</span><span class="p">):</span>
 | 
	
		
			
				|  |  | +            <span class="n">call_completed</span> <span class="o">=</span> <span class="kc">True</span>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    <span class="k">def</span> <span class="nf">_fire_pending_add_done_callbacks</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
 | 
	
		
			
				|  |  | -                                         <span class="n">unused_task</span><span class="p">:</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">Task</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
 | 
	
		
			
				|  |  | -        <span class="k">for</span> <span class="n">callback</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pending_add_done_callbacks</span><span class="p">:</span>
 | 
	
		
			
				|  |  | -            <span class="n">callback</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
 | 
	
		
			
				|  |  | +        <span class="k">if</span> <span class="n">call_completed</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +            <span class="k">for</span> <span class="n">callback</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pending_add_done_callbacks</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +                <span class="n">callback</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
 | 
	
		
			
				|  |  | +        <span class="k">else</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +            <span class="k">for</span> <span class="n">callback</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pending_add_done_callbacks</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +                <span class="n">callback</span> <span class="o">=</span> <span class="n">functools</span><span class="o">.</span><span class="n">partial</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_wrap_add_done_callback</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                                             <span class="n">callback</span><span class="p">)</span>
 | 
	
		
			
				|  |  | +                <span class="n">call</span><span class="o">.</span><span class="n">add_done_callback</span><span class="p">(</span><span class="n">callback</span><span class="p">)</span>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          <span class="bp">self</span><span class="o">.</span><span class="n">_pending_add_done_callbacks</span> <span class="o">=</span> <span class="p">[]</span>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      <span class="k">def</span> <span class="nf">_wrap_add_done_callback</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">callback</span><span class="p">:</span> <span class="n">DoneCallbackType</span><span class="p">,</span>
 | 
	
		
			
				|  |  | -                                <span class="n">unused_task</span><span class="p">:</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">Task</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +                                <span class="n">unused_call</span><span class="p">:</span> <span class="n">_base_call</span><span class="o">.</span><span class="n">Call</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
 | 
	
		
			
				|  |  |          <span class="n">callback</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -<div class="viewcode-block" id="InterceptedUnaryUnaryCall.cancel"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.InterceptedUnaryUnaryCall.cancel">[docs]</a>    <span class="k">def</span> <span class="nf">cancel</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="nb">bool</span><span class="p">:</span>
 | 
	
		
			
				|  |  | -        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_interceptors_task</span><span class="o">.</span><span class="n">done</span><span class="p">():</span>
 | 
	
		
			
				|  |  | +    <span class="k">def</span> <span class="nf">cancel</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="nb">bool</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_interceptors_task</span><span class="o">.</span><span class="n">done</span><span class="p">():</span>
 | 
	
		
			
				|  |  | +            <span class="c1"># There is no yet the intercepted call available,</span>
 | 
	
		
			
				|  |  | +            <span class="c1"># Trying to cancel it by using the generic Asyncio</span>
 | 
	
		
			
				|  |  | +            <span class="c1"># cancellation method.</span>
 | 
	
		
			
				|  |  | +            <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_interceptors_task</span><span class="o">.</span><span class="n">cancel</span><span class="p">()</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        <span class="k">try</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +            <span class="n">call</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_interceptors_task</span><span class="o">.</span><span class="n">result</span><span class="p">()</span>
 | 
	
		
			
				|  |  | +        <span class="k">except</span> <span class="n">AioRpcError</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +            <span class="k">return</span> <span class="kc">False</span>
 | 
	
		
			
				|  |  | +        <span class="k">except</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">CancelledError</span><span class="p">:</span>
 | 
	
		
			
				|  |  |              <span class="k">return</span> <span class="kc">False</span>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_interceptors_task</span><span class="o">.</span><span class="n">cancel</span><span class="p">()</span></div>
 | 
	
		
			
				|  |  | +        <span class="k">return</span> <span class="n">call</span><span class="o">.</span><span class="n">cancel</span><span class="p">()</span>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -<div class="viewcode-block" id="InterceptedUnaryUnaryCall.cancelled"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.InterceptedUnaryUnaryCall.cancelled">[docs]</a>    <span class="k">def</span> <span class="nf">cancelled</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="nb">bool</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +    <span class="k">def</span> <span class="nf">cancelled</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="nb">bool</span><span class="p">:</span>
 | 
	
		
			
				|  |  |          <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_interceptors_task</span><span class="o">.</span><span class="n">done</span><span class="p">():</span>
 | 
	
		
			
				|  |  |              <span class="k">return</span> <span class="kc">False</span>
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -331,9 +428,9 @@
 | 
	
		
			
				|  |  |          <span class="k">except</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">CancelledError</span><span class="p">:</span>
 | 
	
		
			
				|  |  |              <span class="k">return</span> <span class="kc">True</span>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        <span class="k">return</span> <span class="n">call</span><span class="o">.</span><span class="n">cancelled</span><span class="p">()</span></div>
 | 
	
		
			
				|  |  | +        <span class="k">return</span> <span class="n">call</span><span class="o">.</span><span class="n">cancelled</span><span class="p">()</span>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -<div class="viewcode-block" id="InterceptedUnaryUnaryCall.done"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.InterceptedUnaryUnaryCall.done">[docs]</a>    <span class="k">def</span> <span class="nf">done</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="nb">bool</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +    <span class="k">def</span> <span class="nf">done</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="nb">bool</span><span class="p">:</span>
 | 
	
		
			
				|  |  |          <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_interceptors_task</span><span class="o">.</span><span class="n">done</span><span class="p">():</span>
 | 
	
		
			
				|  |  |              <span class="k">return</span> <span class="kc">False</span>
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -342,9 +439,9 @@
 | 
	
		
			
				|  |  |          <span class="k">except</span> <span class="p">(</span><span class="n">AioRpcError</span><span class="p">,</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">CancelledError</span><span class="p">):</span>
 | 
	
		
			
				|  |  |              <span class="k">return</span> <span class="kc">True</span>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        <span class="k">return</span> <span class="n">call</span><span class="o">.</span><span class="n">done</span><span class="p">()</span></div>
 | 
	
		
			
				|  |  | +        <span class="k">return</span> <span class="n">call</span><span class="o">.</span><span class="n">done</span><span class="p">()</span>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -<div class="viewcode-block" id="InterceptedUnaryUnaryCall.add_done_callback"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.InterceptedUnaryUnaryCall.add_done_callback">[docs]</a>    <span class="k">def</span> <span class="nf">add_done_callback</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">callback</span><span class="p">:</span> <span class="n">DoneCallbackType</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +    <span class="k">def</span> <span class="nf">add_done_callback</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">callback</span><span class="p">:</span> <span class="n">DoneCallbackType</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
 | 
	
		
			
				|  |  |          <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_interceptors_task</span><span class="o">.</span><span class="n">done</span><span class="p">():</span>
 | 
	
		
			
				|  |  |              <span class="bp">self</span><span class="o">.</span><span class="n">_pending_add_done_callbacks</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">callback</span><span class="p">)</span>
 | 
	
		
			
				|  |  |              <span class="k">return</span>
 | 
	
	
		
			
				|  | @@ -359,12 +456,12 @@
 | 
	
		
			
				|  |  |              <span class="n">callback</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
 | 
	
		
			
				|  |  |          <span class="k">else</span><span class="p">:</span>
 | 
	
		
			
				|  |  |              <span class="n">callback</span> <span class="o">=</span> <span class="n">functools</span><span class="o">.</span><span class="n">partial</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_wrap_add_done_callback</span><span class="p">,</span> <span class="n">callback</span><span class="p">)</span>
 | 
	
		
			
				|  |  | -            <span class="n">call</span><span class="o">.</span><span class="n">add_done_callback</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_wrap_add_done_callback</span><span class="p">)</span></div>
 | 
	
		
			
				|  |  | +            <span class="n">call</span><span class="o">.</span><span class="n">add_done_callback</span><span class="p">(</span><span class="n">callback</span><span class="p">)</span>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -<div class="viewcode-block" id="InterceptedUnaryUnaryCall.time_remaining"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.InterceptedUnaryUnaryCall.time_remaining">[docs]</a>    <span class="k">def</span> <span class="nf">time_remaining</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">Optional</span><span class="p">[</span><span class="nb">float</span><span class="p">]:</span>
 | 
	
		
			
				|  |  | -        <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span></div>
 | 
	
		
			
				|  |  | +    <span class="k">def</span> <span class="nf">time_remaining</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">Optional</span><span class="p">[</span><span class="nb">float</span><span class="p">]:</span>
 | 
	
		
			
				|  |  | +        <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -<div class="viewcode-block" id="InterceptedUnaryUnaryCall.initial_metadata"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.InterceptedUnaryUnaryCall.initial_metadata">[docs]</a>    <span class="k">async</span> <span class="k">def</span> <span class="nf">initial_metadata</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">Optional</span><span class="p">[</span><span class="n">MetadataType</span><span class="p">]:</span>
 | 
	
		
			
				|  |  | +    <span class="k">async</span> <span class="k">def</span> <span class="nf">initial_metadata</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">Optional</span><span class="p">[</span><span class="n">Metadata</span><span class="p">]:</span>
 | 
	
		
			
				|  |  |          <span class="k">try</span><span class="p">:</span>
 | 
	
		
			
				|  |  |              <span class="n">call</span> <span class="o">=</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">_interceptors_task</span>
 | 
	
		
			
				|  |  |          <span class="k">except</span> <span class="n">AioRpcError</span> <span class="k">as</span> <span class="n">err</span><span class="p">:</span>
 | 
	
	
		
			
				|  | @@ -372,9 +469,9 @@
 | 
	
		
			
				|  |  |          <span class="k">except</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">CancelledError</span><span class="p">:</span>
 | 
	
		
			
				|  |  |              <span class="k">return</span> <span class="kc">None</span>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        <span class="k">return</span> <span class="k">await</span> <span class="n">call</span><span class="o">.</span><span class="n">initial_metadata</span><span class="p">()</span></div>
 | 
	
		
			
				|  |  | +        <span class="k">return</span> <span class="k">await</span> <span class="n">call</span><span class="o">.</span><span class="n">initial_metadata</span><span class="p">()</span>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -<div class="viewcode-block" id="InterceptedUnaryUnaryCall.trailing_metadata"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.InterceptedUnaryUnaryCall.trailing_metadata">[docs]</a>    <span class="k">async</span> <span class="k">def</span> <span class="nf">trailing_metadata</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">Optional</span><span class="p">[</span><span class="n">MetadataType</span><span class="p">]:</span>
 | 
	
		
			
				|  |  | +    <span class="k">async</span> <span class="k">def</span> <span class="nf">trailing_metadata</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">Optional</span><span class="p">[</span><span class="n">Metadata</span><span class="p">]:</span>
 | 
	
		
			
				|  |  |          <span class="k">try</span><span class="p">:</span>
 | 
	
		
			
				|  |  |              <span class="n">call</span> <span class="o">=</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">_interceptors_task</span>
 | 
	
		
			
				|  |  |          <span class="k">except</span> <span class="n">AioRpcError</span> <span class="k">as</span> <span class="n">err</span><span class="p">:</span>
 | 
	
	
		
			
				|  | @@ -382,9 +479,9 @@
 | 
	
		
			
				|  |  |          <span class="k">except</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">CancelledError</span><span class="p">:</span>
 | 
	
		
			
				|  |  |              <span class="k">return</span> <span class="kc">None</span>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        <span class="k">return</span> <span class="k">await</span> <span class="n">call</span><span class="o">.</span><span class="n">trailing_metadata</span><span class="p">()</span></div>
 | 
	
		
			
				|  |  | +        <span class="k">return</span> <span class="k">await</span> <span class="n">call</span><span class="o">.</span><span class="n">trailing_metadata</span><span class="p">()</span>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -<div class="viewcode-block" id="InterceptedUnaryUnaryCall.code"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.InterceptedUnaryUnaryCall.code">[docs]</a>    <span class="k">async</span> <span class="k">def</span> <span class="nf">code</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">grpc</span><span class="o">.</span><span class="n">StatusCode</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +    <span class="k">async</span> <span class="k">def</span> <span class="nf">code</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">grpc</span><span class="o">.</span><span class="n">StatusCode</span><span class="p">:</span>
 | 
	
		
			
				|  |  |          <span class="k">try</span><span class="p">:</span>
 | 
	
		
			
				|  |  |              <span class="n">call</span> <span class="o">=</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">_interceptors_task</span>
 | 
	
		
			
				|  |  |          <span class="k">except</span> <span class="n">AioRpcError</span> <span class="k">as</span> <span class="n">err</span><span class="p">:</span>
 | 
	
	
		
			
				|  | @@ -392,9 +489,9 @@
 | 
	
		
			
				|  |  |          <span class="k">except</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">CancelledError</span><span class="p">:</span>
 | 
	
		
			
				|  |  |              <span class="k">return</span> <span class="n">grpc</span><span class="o">.</span><span class="n">StatusCode</span><span class="o">.</span><span class="n">CANCELLED</span>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        <span class="k">return</span> <span class="k">await</span> <span class="n">call</span><span class="o">.</span><span class="n">code</span><span class="p">()</span></div>
 | 
	
		
			
				|  |  | +        <span class="k">return</span> <span class="k">await</span> <span class="n">call</span><span class="o">.</span><span class="n">code</span><span class="p">()</span>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -<div class="viewcode-block" id="InterceptedUnaryUnaryCall.details"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.InterceptedUnaryUnaryCall.details">[docs]</a>    <span class="k">async</span> <span class="k">def</span> <span class="nf">details</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +    <span class="k">async</span> <span class="k">def</span> <span class="nf">details</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
 | 
	
		
			
				|  |  |          <span class="k">try</span><span class="p">:</span>
 | 
	
		
			
				|  |  |              <span class="n">call</span> <span class="o">=</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">_interceptors_task</span>
 | 
	
		
			
				|  |  |          <span class="k">except</span> <span class="n">AioRpcError</span> <span class="k">as</span> <span class="n">err</span><span class="p">:</span>
 | 
	
	
		
			
				|  | @@ -402,7 +499,7 @@
 | 
	
		
			
				|  |  |          <span class="k">except</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">CancelledError</span><span class="p">:</span>
 | 
	
		
			
				|  |  |              <span class="k">return</span> <span class="n">_LOCAL_CANCELLATION_DETAILS</span>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        <span class="k">return</span> <span class="k">await</span> <span class="n">call</span><span class="o">.</span><span class="n">details</span><span class="p">()</span></div>
 | 
	
		
			
				|  |  | +        <span class="k">return</span> <span class="k">await</span> <span class="n">call</span><span class="o">.</span><span class="n">details</span><span class="p">()</span>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      <span class="k">async</span> <span class="k">def</span> <span class="nf">debug_error_string</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
 | 
	
		
			
				|  |  |          <span class="k">try</span><span class="p">:</span>
 | 
	
	
		
			
				|  | @@ -414,14 +511,438 @@
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          <span class="k">return</span> <span class="k">await</span> <span class="n">call</span><span class="o">.</span><span class="n">debug_error_string</span><span class="p">()</span>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    <span class="k">async</span> <span class="k">def</span> <span class="nf">wait_for_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +        <span class="n">call</span> <span class="o">=</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">_interceptors_task</span>
 | 
	
		
			
				|  |  | +        <span class="k">return</span> <span class="k">await</span> <span class="n">call</span><span class="o">.</span><span class="n">wait_for_connection</span><span class="p">()</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +<span class="k">class</span> <span class="nc">_InterceptedUnaryResponseMixin</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      <span class="k">def</span> <span class="fm">__await__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
 | 
	
		
			
				|  |  |          <span class="n">call</span> <span class="o">=</span> <span class="k">yield from</span> <span class="bp">self</span><span class="o">.</span><span class="n">_interceptors_task</span><span class="o">.</span><span class="fm">__await__</span><span class="p">()</span>
 | 
	
		
			
				|  |  |          <span class="n">response</span> <span class="o">=</span> <span class="k">yield from</span> <span class="n">call</span><span class="o">.</span><span class="fm">__await__</span><span class="p">()</span>
 | 
	
		
			
				|  |  |          <span class="k">return</span> <span class="n">response</span>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -<div class="viewcode-block" id="InterceptedUnaryUnaryCall.wait_for_connection"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.InterceptedUnaryUnaryCall.wait_for_connection">[docs]</a>    <span class="k">async</span> <span class="k">def</span> <span class="nf">wait_for_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +<span class="k">class</span> <span class="nc">_InterceptedStreamResponseMixin</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +    <span class="n">_response_aiter</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">AsyncIterable</span><span class="p">[</span><span class="n">ResponseType</span><span class="p">]]</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    <span class="k">def</span> <span class="nf">_init_stream_response_mixin</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +        <span class="c1"># Is initalized later, otherwise if the iterator is not finnally</span>
 | 
	
		
			
				|  |  | +        <span class="c1"># consumed a logging warning is emmited by Asyncio.</span>
 | 
	
		
			
				|  |  | +        <span class="bp">self</span><span class="o">.</span><span class="n">_response_aiter</span> <span class="o">=</span> <span class="kc">None</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    <span class="k">async</span> <span class="k">def</span> <span class="nf">_wait_for_interceptor_task_response_iterator</span><span class="p">(</span><span class="bp">self</span>
 | 
	
		
			
				|  |  | +                                                          <span class="p">)</span> <span class="o">-></span> <span class="n">ResponseType</span><span class="p">:</span>
 | 
	
		
			
				|  |  |          <span class="n">call</span> <span class="o">=</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">_interceptors_task</span>
 | 
	
		
			
				|  |  | -        <span class="k">return</span> <span class="k">await</span> <span class="n">call</span><span class="o">.</span><span class="n">wait_for_connection</span><span class="p">()</span></div></div>
 | 
	
		
			
				|  |  | +        <span class="k">async</span> <span class="k">for</span> <span class="n">response</span> <span class="ow">in</span> <span class="n">call</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +            <span class="k">yield</span> <span class="n">response</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    <span class="k">def</span> <span class="fm">__aiter__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">AsyncIterable</span><span class="p">[</span><span class="n">ResponseType</span><span class="p">]:</span>
 | 
	
		
			
				|  |  | +        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_response_aiter</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +            <span class="bp">self</span><span class="o">.</span><span class="n">_response_aiter</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_wait_for_interceptor_task_response_iterator</span><span class="p">(</span>
 | 
	
		
			
				|  |  | +            <span class="p">)</span>
 | 
	
		
			
				|  |  | +        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_response_aiter</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    <span class="k">async</span> <span class="k">def</span> <span class="nf">read</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">ResponseType</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_response_aiter</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +            <span class="bp">self</span><span class="o">.</span><span class="n">_response_aiter</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_wait_for_interceptor_task_response_iterator</span><span class="p">(</span>
 | 
	
		
			
				|  |  | +            <span class="p">)</span>
 | 
	
		
			
				|  |  | +        <span class="k">return</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">_response_aiter</span><span class="o">.</span><span class="n">asend</span><span class="p">(</span><span class="kc">None</span><span class="p">)</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +<span class="k">class</span> <span class="nc">_InterceptedStreamRequestMixin</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    <span class="n">_write_to_iterator_async_gen</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">AsyncIterable</span><span class="p">[</span><span class="n">RequestType</span><span class="p">]]</span>
 | 
	
		
			
				|  |  | +    <span class="n">_write_to_iterator_queue</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">asyncio</span><span class="o">.</span><span class="n">Queue</span><span class="p">]</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    <span class="n">_FINISH_ITERATOR_SENTINEL</span> <span class="o">=</span> <span class="nb">object</span><span class="p">()</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    <span class="k">def</span> <span class="nf">_init_stream_request_mixin</span><span class="p">(</span>
 | 
	
		
			
				|  |  | +            <span class="bp">self</span><span class="p">,</span> <span class="n">request_iterator</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">RequestIterableType</span><span class="p">]</span>
 | 
	
		
			
				|  |  | +    <span class="p">)</span> <span class="o">-></span> <span class="n">RequestIterableType</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        <span class="k">if</span> <span class="n">request_iterator</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +            <span class="c1"># We provide our own request iterator which is a proxy</span>
 | 
	
		
			
				|  |  | +            <span class="c1"># of the futures writes that will be done by the caller.</span>
 | 
	
		
			
				|  |  | +            <span class="bp">self</span><span class="o">.</span><span class="n">_write_to_iterator_queue</span> <span class="o">=</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">Queue</span><span class="p">(</span><span class="n">maxsize</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
 | 
	
		
			
				|  |  | +            <span class="bp">self</span><span class="o">.</span><span class="n">_write_to_iterator_async_gen</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_proxy_writes_as_request_iterator</span><span class="p">(</span>
 | 
	
		
			
				|  |  | +            <span class="p">)</span>
 | 
	
		
			
				|  |  | +            <span class="n">request_iterator</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_write_to_iterator_async_gen</span>
 | 
	
		
			
				|  |  | +        <span class="k">else</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +            <span class="bp">self</span><span class="o">.</span><span class="n">_write_to_iterator_queue</span> <span class="o">=</span> <span class="kc">None</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        <span class="k">return</span> <span class="n">request_iterator</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    <span class="k">async</span> <span class="k">def</span> <span class="nf">_proxy_writes_as_request_iterator</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
 | 
	
		
			
				|  |  | +        <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">_interceptors_task</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +            <span class="n">value</span> <span class="o">=</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">_write_to_iterator_queue</span><span class="o">.</span><span class="n">get</span><span class="p">()</span>
 | 
	
		
			
				|  |  | +            <span class="k">if</span> <span class="n">value</span> <span class="ow">is</span> <span class="n">_InterceptedStreamRequestMixin</span><span class="o">.</span><span class="n">_FINISH_ITERATOR_SENTINEL</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +                <span class="k">break</span>
 | 
	
		
			
				|  |  | +            <span class="k">yield</span> <span class="n">value</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    <span class="k">async</span> <span class="k">def</span> <span class="nf">write</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">:</span> <span class="n">RequestType</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +        <span class="c1"># If no queue was created it means that requests</span>
 | 
	
		
			
				|  |  | +        <span class="c1"># should be expected through an iterators provided</span>
 | 
	
		
			
				|  |  | +        <span class="c1"># by the caller.</span>
 | 
	
		
			
				|  |  | +        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_write_to_iterator_queue</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +            <span class="k">raise</span> <span class="n">cygrpc</span><span class="o">.</span><span class="n">UsageError</span><span class="p">(</span><span class="n">_API_STYLE_ERROR</span><span class="p">)</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        <span class="k">try</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +            <span class="n">call</span> <span class="o">=</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">_interceptors_task</span>
 | 
	
		
			
				|  |  | +        <span class="k">except</span> <span class="p">(</span><span class="n">asyncio</span><span class="o">.</span><span class="n">CancelledError</span><span class="p">,</span> <span class="n">AioRpcError</span><span class="p">):</span>
 | 
	
		
			
				|  |  | +            <span class="k">raise</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">InvalidStateError</span><span class="p">(</span><span class="n">_RPC_ALREADY_FINISHED_DETAILS</span><span class="p">)</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        <span class="k">if</span> <span class="n">call</span><span class="o">.</span><span class="n">done</span><span class="p">():</span>
 | 
	
		
			
				|  |  | +            <span class="k">raise</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">InvalidStateError</span><span class="p">(</span><span class="n">_RPC_ALREADY_FINISHED_DETAILS</span><span class="p">)</span>
 | 
	
		
			
				|  |  | +        <span class="k">elif</span> <span class="n">call</span><span class="o">.</span><span class="n">_done_writing_flag</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +            <span class="k">raise</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">InvalidStateError</span><span class="p">(</span><span class="n">_RPC_HALF_CLOSED_DETAILS</span><span class="p">)</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        <span class="c1"># Write might never end up since the call could abrubtly finish,</span>
 | 
	
		
			
				|  |  | +        <span class="c1"># we give up on the first awaitable object that finishes.</span>
 | 
	
		
			
				|  |  | +        <span class="n">_</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="k">await</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">wait</span><span class="p">(</span>
 | 
	
		
			
				|  |  | +            <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_write_to_iterator_queue</span><span class="o">.</span><span class="n">put</span><span class="p">(</span><span class="n">request</span><span class="p">),</span> <span class="n">call</span><span class="o">.</span><span class="n">code</span><span class="p">()),</span>
 | 
	
		
			
				|  |  | +            <span class="n">return_when</span><span class="o">=</span><span class="n">asyncio</span><span class="o">.</span><span class="n">FIRST_COMPLETED</span><span class="p">)</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        <span class="k">if</span> <span class="n">call</span><span class="o">.</span><span class="n">done</span><span class="p">():</span>
 | 
	
		
			
				|  |  | +            <span class="k">raise</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">InvalidStateError</span><span class="p">(</span><span class="n">_RPC_ALREADY_FINISHED_DETAILS</span><span class="p">)</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    <span class="k">async</span> <span class="k">def</span> <span class="nf">done_writing</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +        <span class="sd">"""Signal peer that client is done writing.</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +<span class="sd">        This method is idempotent.</span>
 | 
	
		
			
				|  |  | +<span class="sd">        """</span>
 | 
	
		
			
				|  |  | +        <span class="c1"># If no queue was created it means that requests</span>
 | 
	
		
			
				|  |  | +        <span class="c1"># should be expected through an iterators provided</span>
 | 
	
		
			
				|  |  | +        <span class="c1"># by the caller.</span>
 | 
	
		
			
				|  |  | +        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_write_to_iterator_queue</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +            <span class="k">raise</span> <span class="n">cygrpc</span><span class="o">.</span><span class="n">UsageError</span><span class="p">(</span><span class="n">_API_STYLE_ERROR</span><span class="p">)</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        <span class="k">try</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +            <span class="n">call</span> <span class="o">=</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">_interceptors_task</span>
 | 
	
		
			
				|  |  | +        <span class="k">except</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">CancelledError</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +            <span class="k">raise</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">InvalidStateError</span><span class="p">(</span><span class="n">_RPC_ALREADY_FINISHED_DETAILS</span><span class="p">)</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        <span class="c1"># Write might never end up since the call could abrubtly finish,</span>
 | 
	
		
			
				|  |  | +        <span class="c1"># we give up on the first awaitable object that finishes.</span>
 | 
	
		
			
				|  |  | +        <span class="n">_</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="k">await</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">wait</span><span class="p">((</span><span class="bp">self</span><span class="o">.</span><span class="n">_write_to_iterator_queue</span><span class="o">.</span><span class="n">put</span><span class="p">(</span>
 | 
	
		
			
				|  |  | +            <span class="n">_InterceptedStreamRequestMixin</span><span class="o">.</span><span class="n">_FINISH_ITERATOR_SENTINEL</span><span class="p">),</span>
 | 
	
		
			
				|  |  | +                                   <span class="n">call</span><span class="o">.</span><span class="n">code</span><span class="p">()),</span>
 | 
	
		
			
				|  |  | +                                  <span class="n">return_when</span><span class="o">=</span><span class="n">asyncio</span><span class="o">.</span><span class="n">FIRST_COMPLETED</span><span class="p">)</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +<div class="viewcode-block" id="InterceptedUnaryUnaryCall"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.InterceptedUnaryUnaryCall">[docs]</a><span class="k">class</span> <span class="nc">InterceptedUnaryUnaryCall</span><span class="p">(</span><span class="n">_InterceptedUnaryResponseMixin</span><span class="p">,</span> <span class="n">InterceptedCall</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                                <span class="n">_base_call</span><span class="o">.</span><span class="n">UnaryUnaryCall</span><span class="p">):</span>
 | 
	
		
			
				|  |  | +    <span class="sd">"""Used for running a `UnaryUnaryCall` wrapped by interceptors.</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +<span class="sd">    For the `__await__` method is it is proxied to the intercepted call only when</span>
 | 
	
		
			
				|  |  | +<span class="sd">    the interceptor task is finished.</span>
 | 
	
		
			
				|  |  | +<span class="sd">    """</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    <span class="n">_loop</span><span class="p">:</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">AbstractEventLoop</span>
 | 
	
		
			
				|  |  | +    <span class="n">_channel</span><span class="p">:</span> <span class="n">cygrpc</span><span class="o">.</span><span class="n">AioChannel</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    <span class="c1"># pylint: disable=too-many-arguments</span>
 | 
	
		
			
				|  |  | +    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">interceptors</span><span class="p">:</span> <span class="n">Sequence</span><span class="p">[</span><span class="n">UnaryUnaryClientInterceptor</span><span class="p">],</span>
 | 
	
		
			
				|  |  | +                 <span class="n">request</span><span class="p">:</span> <span class="n">RequestType</span><span class="p">,</span> <span class="n">timeout</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">float</span><span class="p">],</span>
 | 
	
		
			
				|  |  | +                 <span class="n">metadata</span><span class="p">:</span> <span class="n">Metadata</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                 <span class="n">credentials</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">grpc</span><span class="o">.</span><span class="n">CallCredentials</span><span class="p">],</span>
 | 
	
		
			
				|  |  | +                 <span class="n">wait_for_ready</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">],</span> <span class="n">channel</span><span class="p">:</span> <span class="n">cygrpc</span><span class="o">.</span><span class="n">AioChannel</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                 <span class="n">method</span><span class="p">:</span> <span class="nb">bytes</span><span class="p">,</span> <span class="n">request_serializer</span><span class="p">:</span> <span class="n">SerializingFunction</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                 <span class="n">response_deserializer</span><span class="p">:</span> <span class="n">DeserializingFunction</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                 <span class="n">loop</span><span class="p">:</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">AbstractEventLoop</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +        <span class="bp">self</span><span class="o">.</span><span class="n">_loop</span> <span class="o">=</span> <span class="n">loop</span>
 | 
	
		
			
				|  |  | +        <span class="bp">self</span><span class="o">.</span><span class="n">_channel</span> <span class="o">=</span> <span class="n">channel</span>
 | 
	
		
			
				|  |  | +        <span class="n">interceptors_task</span> <span class="o">=</span> <span class="n">loop</span><span class="o">.</span><span class="n">create_task</span><span class="p">(</span>
 | 
	
		
			
				|  |  | +            <span class="bp">self</span><span class="o">.</span><span class="n">_invoke</span><span class="p">(</span><span class="n">interceptors</span><span class="p">,</span> <span class="n">method</span><span class="p">,</span> <span class="n">timeout</span><span class="p">,</span> <span class="n">metadata</span><span class="p">,</span> <span class="n">credentials</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                         <span class="n">wait_for_ready</span><span class="p">,</span> <span class="n">request</span><span class="p">,</span> <span class="n">request_serializer</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                         <span class="n">response_deserializer</span><span class="p">))</span>
 | 
	
		
			
				|  |  | +        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">interceptors_task</span><span class="p">)</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    <span class="c1"># pylint: disable=too-many-arguments</span>
 | 
	
		
			
				|  |  | +    <span class="k">async</span> <span class="k">def</span> <span class="nf">_invoke</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">interceptors</span><span class="p">:</span> <span class="n">Sequence</span><span class="p">[</span><span class="n">UnaryUnaryClientInterceptor</span><span class="p">],</span>
 | 
	
		
			
				|  |  | +                      <span class="n">method</span><span class="p">:</span> <span class="nb">bytes</span><span class="p">,</span> <span class="n">timeout</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">float</span><span class="p">],</span>
 | 
	
		
			
				|  |  | +                      <span class="n">metadata</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Metadata</span><span class="p">],</span>
 | 
	
		
			
				|  |  | +                      <span class="n">credentials</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">grpc</span><span class="o">.</span><span class="n">CallCredentials</span><span class="p">],</span>
 | 
	
		
			
				|  |  | +                      <span class="n">wait_for_ready</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">],</span> <span class="n">request</span><span class="p">:</span> <span class="n">RequestType</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                      <span class="n">request_serializer</span><span class="p">:</span> <span class="n">SerializingFunction</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                      <span class="n">response_deserializer</span><span class="p">:</span> <span class="n">DeserializingFunction</span>
 | 
	
		
			
				|  |  | +                     <span class="p">)</span> <span class="o">-></span> <span class="n">UnaryUnaryCall</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +        <span class="sd">"""Run the RPC call wrapped in interceptors"""</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        <span class="k">async</span> <span class="k">def</span> <span class="nf">_run_interceptor</span><span class="p">(</span>
 | 
	
		
			
				|  |  | +                <span class="n">interceptors</span><span class="p">:</span> <span class="n">Iterator</span><span class="p">[</span><span class="n">UnaryUnaryClientInterceptor</span><span class="p">],</span>
 | 
	
		
			
				|  |  | +                <span class="n">client_call_details</span><span class="p">:</span> <span class="n">ClientCallDetails</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                <span class="n">request</span><span class="p">:</span> <span class="n">RequestType</span><span class="p">)</span> <span class="o">-></span> <span class="n">_base_call</span><span class="o">.</span><span class="n">UnaryUnaryCall</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            <span class="n">interceptor</span> <span class="o">=</span> <span class="nb">next</span><span class="p">(</span><span class="n">interceptors</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            <span class="k">if</span> <span class="n">interceptor</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +                <span class="n">continuation</span> <span class="o">=</span> <span class="n">functools</span><span class="o">.</span><span class="n">partial</span><span class="p">(</span><span class="n">_run_interceptor</span><span class="p">,</span> <span class="n">interceptors</span><span class="p">)</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                <span class="n">call_or_response</span> <span class="o">=</span> <span class="k">await</span> <span class="n">interceptor</span><span class="o">.</span><span class="n">intercept_unary_unary</span><span class="p">(</span>
 | 
	
		
			
				|  |  | +                    <span class="n">continuation</span><span class="p">,</span> <span class="n">client_call_details</span><span class="p">,</span> <span class="n">request</span><span class="p">)</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">call_or_response</span><span class="p">,</span> <span class="n">_base_call</span><span class="o">.</span><span class="n">UnaryUnaryCall</span><span class="p">):</span>
 | 
	
		
			
				|  |  | +                    <span class="k">return</span> <span class="n">call_or_response</span>
 | 
	
		
			
				|  |  | +                <span class="k">else</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +                    <span class="k">return</span> <span class="n">UnaryUnaryCallResponse</span><span class="p">(</span><span class="n">call_or_response</span><span class="p">)</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            <span class="k">else</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +                <span class="k">return</span> <span class="n">UnaryUnaryCall</span><span class="p">(</span>
 | 
	
		
			
				|  |  | +                    <span class="n">request</span><span class="p">,</span> <span class="n">_timeout_to_deadline</span><span class="p">(</span><span class="n">client_call_details</span><span class="o">.</span><span class="n">timeout</span><span class="p">),</span>
 | 
	
		
			
				|  |  | +                    <span class="n">client_call_details</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                    <span class="n">client_call_details</span><span class="o">.</span><span class="n">credentials</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                    <span class="n">client_call_details</span><span class="o">.</span><span class="n">wait_for_ready</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_channel</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                    <span class="n">client_call_details</span><span class="o">.</span><span class="n">method</span><span class="p">,</span> <span class="n">request_serializer</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                    <span class="n">response_deserializer</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_loop</span><span class="p">)</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        <span class="n">client_call_details</span> <span class="o">=</span> <span class="n">ClientCallDetails</span><span class="p">(</span><span class="n">method</span><span class="p">,</span> <span class="n">timeout</span><span class="p">,</span> <span class="n">metadata</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                                                <span class="n">credentials</span><span class="p">,</span> <span class="n">wait_for_ready</span><span class="p">)</span>
 | 
	
		
			
				|  |  | +        <span class="k">return</span> <span class="k">await</span> <span class="n">_run_interceptor</span><span class="p">(</span><span class="nb">iter</span><span class="p">(</span><span class="n">interceptors</span><span class="p">),</span> <span class="n">client_call_details</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                                      <span class="n">request</span><span class="p">)</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +<div class="viewcode-block" id="InterceptedUnaryUnaryCall.time_remaining"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.InterceptedUnaryUnaryCall.time_remaining">[docs]</a>    <span class="k">def</span> <span class="nf">time_remaining</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">Optional</span><span class="p">[</span><span class="nb">float</span><span class="p">]:</span>
 | 
	
		
			
				|  |  | +        <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span></div></div>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +<span class="k">class</span> <span class="nc">InterceptedUnaryStreamCall</span><span class="p">(</span><span class="n">_InterceptedStreamResponseMixin</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                                 <span class="n">InterceptedCall</span><span class="p">,</span> <span class="n">_base_call</span><span class="o">.</span><span class="n">UnaryStreamCall</span><span class="p">):</span>
 | 
	
		
			
				|  |  | +    <span class="sd">"""Used for running a `UnaryStreamCall` wrapped by interceptors."""</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    <span class="n">_loop</span><span class="p">:</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">AbstractEventLoop</span>
 | 
	
		
			
				|  |  | +    <span class="n">_channel</span><span class="p">:</span> <span class="n">cygrpc</span><span class="o">.</span><span class="n">AioChannel</span>
 | 
	
		
			
				|  |  | +    <span class="n">_last_returned_call_from_interceptors</span> <span class="o">=</span> <span class="n">Optional</span><span class="p">[</span><span class="n">_base_call</span><span class="o">.</span><span class="n">UnaryStreamCall</span><span class="p">]</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    <span class="c1"># pylint: disable=too-many-arguments</span>
 | 
	
		
			
				|  |  | +    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">interceptors</span><span class="p">:</span> <span class="n">Sequence</span><span class="p">[</span><span class="n">UnaryStreamClientInterceptor</span><span class="p">],</span>
 | 
	
		
			
				|  |  | +                 <span class="n">request</span><span class="p">:</span> <span class="n">RequestType</span><span class="p">,</span> <span class="n">timeout</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">float</span><span class="p">],</span>
 | 
	
		
			
				|  |  | +                 <span class="n">metadata</span><span class="p">:</span> <span class="n">Metadata</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                 <span class="n">credentials</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">grpc</span><span class="o">.</span><span class="n">CallCredentials</span><span class="p">],</span>
 | 
	
		
			
				|  |  | +                 <span class="n">wait_for_ready</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">],</span> <span class="n">channel</span><span class="p">:</span> <span class="n">cygrpc</span><span class="o">.</span><span class="n">AioChannel</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                 <span class="n">method</span><span class="p">:</span> <span class="nb">bytes</span><span class="p">,</span> <span class="n">request_serializer</span><span class="p">:</span> <span class="n">SerializingFunction</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                 <span class="n">response_deserializer</span><span class="p">:</span> <span class="n">DeserializingFunction</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                 <span class="n">loop</span><span class="p">:</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">AbstractEventLoop</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +        <span class="bp">self</span><span class="o">.</span><span class="n">_loop</span> <span class="o">=</span> <span class="n">loop</span>
 | 
	
		
			
				|  |  | +        <span class="bp">self</span><span class="o">.</span><span class="n">_channel</span> <span class="o">=</span> <span class="n">channel</span>
 | 
	
		
			
				|  |  | +        <span class="bp">self</span><span class="o">.</span><span class="n">_init_stream_response_mixin</span><span class="p">()</span>
 | 
	
		
			
				|  |  | +        <span class="bp">self</span><span class="o">.</span><span class="n">_last_returned_call_from_interceptors</span> <span class="o">=</span> <span class="kc">None</span>
 | 
	
		
			
				|  |  | +        <span class="n">interceptors_task</span> <span class="o">=</span> <span class="n">loop</span><span class="o">.</span><span class="n">create_task</span><span class="p">(</span>
 | 
	
		
			
				|  |  | +            <span class="bp">self</span><span class="o">.</span><span class="n">_invoke</span><span class="p">(</span><span class="n">interceptors</span><span class="p">,</span> <span class="n">method</span><span class="p">,</span> <span class="n">timeout</span><span class="p">,</span> <span class="n">metadata</span><span class="p">,</span> <span class="n">credentials</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                         <span class="n">wait_for_ready</span><span class="p">,</span> <span class="n">request</span><span class="p">,</span> <span class="n">request_serializer</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                         <span class="n">response_deserializer</span><span class="p">))</span>
 | 
	
		
			
				|  |  | +        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">interceptors_task</span><span class="p">)</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    <span class="c1"># pylint: disable=too-many-arguments</span>
 | 
	
		
			
				|  |  | +    <span class="k">async</span> <span class="k">def</span> <span class="nf">_invoke</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">interceptors</span><span class="p">:</span> <span class="n">Sequence</span><span class="p">[</span><span class="n">UnaryUnaryClientInterceptor</span><span class="p">],</span>
 | 
	
		
			
				|  |  | +                      <span class="n">method</span><span class="p">:</span> <span class="nb">bytes</span><span class="p">,</span> <span class="n">timeout</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">float</span><span class="p">],</span>
 | 
	
		
			
				|  |  | +                      <span class="n">metadata</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Metadata</span><span class="p">],</span>
 | 
	
		
			
				|  |  | +                      <span class="n">credentials</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">grpc</span><span class="o">.</span><span class="n">CallCredentials</span><span class="p">],</span>
 | 
	
		
			
				|  |  | +                      <span class="n">wait_for_ready</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">],</span> <span class="n">request</span><span class="p">:</span> <span class="n">RequestType</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                      <span class="n">request_serializer</span><span class="p">:</span> <span class="n">SerializingFunction</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                      <span class="n">response_deserializer</span><span class="p">:</span> <span class="n">DeserializingFunction</span>
 | 
	
		
			
				|  |  | +                     <span class="p">)</span> <span class="o">-></span> <span class="n">UnaryStreamCall</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +        <span class="sd">"""Run the RPC call wrapped in interceptors"""</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        <span class="k">async</span> <span class="k">def</span> <span class="nf">_run_interceptor</span><span class="p">(</span>
 | 
	
		
			
				|  |  | +                <span class="n">interceptors</span><span class="p">:</span> <span class="n">Iterator</span><span class="p">[</span><span class="n">UnaryStreamClientInterceptor</span><span class="p">],</span>
 | 
	
		
			
				|  |  | +                <span class="n">client_call_details</span><span class="p">:</span> <span class="n">ClientCallDetails</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                <span class="n">request</span><span class="p">:</span> <span class="n">RequestType</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +        <span class="p">)</span> <span class="o">-></span> <span class="n">_base_call</span><span class="o">.</span><span class="n">UnaryUnaryCall</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            <span class="n">interceptor</span> <span class="o">=</span> <span class="nb">next</span><span class="p">(</span><span class="n">interceptors</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            <span class="k">if</span> <span class="n">interceptor</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +                <span class="n">continuation</span> <span class="o">=</span> <span class="n">functools</span><span class="o">.</span><span class="n">partial</span><span class="p">(</span><span class="n">_run_interceptor</span><span class="p">,</span> <span class="n">interceptors</span><span class="p">)</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                <span class="n">call_or_response_iterator</span> <span class="o">=</span> <span class="k">await</span> <span class="n">interceptor</span><span class="o">.</span><span class="n">intercept_unary_stream</span><span class="p">(</span>
 | 
	
		
			
				|  |  | +                    <span class="n">continuation</span><span class="p">,</span> <span class="n">client_call_details</span><span class="p">,</span> <span class="n">request</span><span class="p">)</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">call_or_response_iterator</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                              <span class="n">_base_call</span><span class="o">.</span><span class="n">UnaryStreamCall</span><span class="p">):</span>
 | 
	
		
			
				|  |  | +                    <span class="bp">self</span><span class="o">.</span><span class="n">_last_returned_call_from_interceptors</span> <span class="o">=</span> <span class="n">call_or_response_iterator</span>
 | 
	
		
			
				|  |  | +                <span class="k">else</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +                    <span class="bp">self</span><span class="o">.</span><span class="n">_last_returned_call_from_interceptors</span> <span class="o">=</span> <span class="n">UnaryStreamCallResponseIterator</span><span class="p">(</span>
 | 
	
		
			
				|  |  | +                        <span class="bp">self</span><span class="o">.</span><span class="n">_last_returned_call_from_interceptors</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                        <span class="n">call_or_response_iterator</span><span class="p">)</span>
 | 
	
		
			
				|  |  | +                <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_last_returned_call_from_interceptors</span>
 | 
	
		
			
				|  |  | +            <span class="k">else</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +                <span class="bp">self</span><span class="o">.</span><span class="n">_last_returned_call_from_interceptors</span> <span class="o">=</span> <span class="n">UnaryStreamCall</span><span class="p">(</span>
 | 
	
		
			
				|  |  | +                    <span class="n">request</span><span class="p">,</span> <span class="n">_timeout_to_deadline</span><span class="p">(</span><span class="n">client_call_details</span><span class="o">.</span><span class="n">timeout</span><span class="p">),</span>
 | 
	
		
			
				|  |  | +                    <span class="n">client_call_details</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                    <span class="n">client_call_details</span><span class="o">.</span><span class="n">credentials</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                    <span class="n">client_call_details</span><span class="o">.</span><span class="n">wait_for_ready</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_channel</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                    <span class="n">client_call_details</span><span class="o">.</span><span class="n">method</span><span class="p">,</span> <span class="n">request_serializer</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                    <span class="n">response_deserializer</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_loop</span><span class="p">)</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_last_returned_call_from_interceptors</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        <span class="n">client_call_details</span> <span class="o">=</span> <span class="n">ClientCallDetails</span><span class="p">(</span><span class="n">method</span><span class="p">,</span> <span class="n">timeout</span><span class="p">,</span> <span class="n">metadata</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                                                <span class="n">credentials</span><span class="p">,</span> <span class="n">wait_for_ready</span><span class="p">)</span>
 | 
	
		
			
				|  |  | +        <span class="k">return</span> <span class="k">await</span> <span class="n">_run_interceptor</span><span class="p">(</span><span class="nb">iter</span><span class="p">(</span><span class="n">interceptors</span><span class="p">),</span> <span class="n">client_call_details</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                                      <span class="n">request</span><span class="p">)</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    <span class="k">def</span> <span class="nf">time_remaining</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">Optional</span><span class="p">[</span><span class="nb">float</span><span class="p">]:</span>
 | 
	
		
			
				|  |  | +        <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +<span class="k">class</span> <span class="nc">InterceptedStreamUnaryCall</span><span class="p">(</span><span class="n">_InterceptedUnaryResponseMixin</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                                 <span class="n">_InterceptedStreamRequestMixin</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                                 <span class="n">InterceptedCall</span><span class="p">,</span> <span class="n">_base_call</span><span class="o">.</span><span class="n">StreamUnaryCall</span><span class="p">):</span>
 | 
	
		
			
				|  |  | +    <span class="sd">"""Used for running a `StreamUnaryCall` wrapped by interceptors.</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +<span class="sd">    For the `__await__` method is it is proxied to the intercepted call only when</span>
 | 
	
		
			
				|  |  | +<span class="sd">    the interceptor task is finished.</span>
 | 
	
		
			
				|  |  | +<span class="sd">    """</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    <span class="n">_loop</span><span class="p">:</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">AbstractEventLoop</span>
 | 
	
		
			
				|  |  | +    <span class="n">_channel</span><span class="p">:</span> <span class="n">cygrpc</span><span class="o">.</span><span class="n">AioChannel</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    <span class="c1"># pylint: disable=too-many-arguments</span>
 | 
	
		
			
				|  |  | +    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">interceptors</span><span class="p">:</span> <span class="n">Sequence</span><span class="p">[</span><span class="n">StreamUnaryClientInterceptor</span><span class="p">],</span>
 | 
	
		
			
				|  |  | +                 <span class="n">request_iterator</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">RequestIterableType</span><span class="p">],</span>
 | 
	
		
			
				|  |  | +                 <span class="n">timeout</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">float</span><span class="p">],</span> <span class="n">metadata</span><span class="p">:</span> <span class="n">Metadata</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                 <span class="n">credentials</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">grpc</span><span class="o">.</span><span class="n">CallCredentials</span><span class="p">],</span>
 | 
	
		
			
				|  |  | +                 <span class="n">wait_for_ready</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">],</span> <span class="n">channel</span><span class="p">:</span> <span class="n">cygrpc</span><span class="o">.</span><span class="n">AioChannel</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                 <span class="n">method</span><span class="p">:</span> <span class="nb">bytes</span><span class="p">,</span> <span class="n">request_serializer</span><span class="p">:</span> <span class="n">SerializingFunction</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                 <span class="n">response_deserializer</span><span class="p">:</span> <span class="n">DeserializingFunction</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                 <span class="n">loop</span><span class="p">:</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">AbstractEventLoop</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +        <span class="bp">self</span><span class="o">.</span><span class="n">_loop</span> <span class="o">=</span> <span class="n">loop</span>
 | 
	
		
			
				|  |  | +        <span class="bp">self</span><span class="o">.</span><span class="n">_channel</span> <span class="o">=</span> <span class="n">channel</span>
 | 
	
		
			
				|  |  | +        <span class="n">request_iterator</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_init_stream_request_mixin</span><span class="p">(</span><span class="n">request_iterator</span><span class="p">)</span>
 | 
	
		
			
				|  |  | +        <span class="n">interceptors_task</span> <span class="o">=</span> <span class="n">loop</span><span class="o">.</span><span class="n">create_task</span><span class="p">(</span>
 | 
	
		
			
				|  |  | +            <span class="bp">self</span><span class="o">.</span><span class="n">_invoke</span><span class="p">(</span><span class="n">interceptors</span><span class="p">,</span> <span class="n">method</span><span class="p">,</span> <span class="n">timeout</span><span class="p">,</span> <span class="n">metadata</span><span class="p">,</span> <span class="n">credentials</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                         <span class="n">wait_for_ready</span><span class="p">,</span> <span class="n">request_iterator</span><span class="p">,</span> <span class="n">request_serializer</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                         <span class="n">response_deserializer</span><span class="p">))</span>
 | 
	
		
			
				|  |  | +        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">interceptors_task</span><span class="p">)</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    <span class="c1"># pylint: disable=too-many-arguments</span>
 | 
	
		
			
				|  |  | +    <span class="k">async</span> <span class="k">def</span> <span class="nf">_invoke</span><span class="p">(</span>
 | 
	
		
			
				|  |  | +            <span class="bp">self</span><span class="p">,</span> <span class="n">interceptors</span><span class="p">:</span> <span class="n">Sequence</span><span class="p">[</span><span class="n">StreamUnaryClientInterceptor</span><span class="p">],</span>
 | 
	
		
			
				|  |  | +            <span class="n">method</span><span class="p">:</span> <span class="nb">bytes</span><span class="p">,</span> <span class="n">timeout</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">float</span><span class="p">],</span>
 | 
	
		
			
				|  |  | +            <span class="n">metadata</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Metadata</span><span class="p">],</span>
 | 
	
		
			
				|  |  | +            <span class="n">credentials</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">grpc</span><span class="o">.</span><span class="n">CallCredentials</span><span class="p">],</span>
 | 
	
		
			
				|  |  | +            <span class="n">wait_for_ready</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">],</span>
 | 
	
		
			
				|  |  | +            <span class="n">request_iterator</span><span class="p">:</span> <span class="n">RequestIterableType</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +            <span class="n">request_serializer</span><span class="p">:</span> <span class="n">SerializingFunction</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +            <span class="n">response_deserializer</span><span class="p">:</span> <span class="n">DeserializingFunction</span><span class="p">)</span> <span class="o">-></span> <span class="n">StreamUnaryCall</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +        <span class="sd">"""Run the RPC call wrapped in interceptors"""</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        <span class="k">async</span> <span class="k">def</span> <span class="nf">_run_interceptor</span><span class="p">(</span>
 | 
	
		
			
				|  |  | +                <span class="n">interceptors</span><span class="p">:</span> <span class="n">Iterator</span><span class="p">[</span><span class="n">UnaryUnaryClientInterceptor</span><span class="p">],</span>
 | 
	
		
			
				|  |  | +                <span class="n">client_call_details</span><span class="p">:</span> <span class="n">ClientCallDetails</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                <span class="n">request_iterator</span><span class="p">:</span> <span class="n">RequestIterableType</span>
 | 
	
		
			
				|  |  | +        <span class="p">)</span> <span class="o">-></span> <span class="n">_base_call</span><span class="o">.</span><span class="n">StreamUnaryCall</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            <span class="n">interceptor</span> <span class="o">=</span> <span class="nb">next</span><span class="p">(</span><span class="n">interceptors</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            <span class="k">if</span> <span class="n">interceptor</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +                <span class="n">continuation</span> <span class="o">=</span> <span class="n">functools</span><span class="o">.</span><span class="n">partial</span><span class="p">(</span><span class="n">_run_interceptor</span><span class="p">,</span> <span class="n">interceptors</span><span class="p">)</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                <span class="k">return</span> <span class="k">await</span> <span class="n">interceptor</span><span class="o">.</span><span class="n">intercept_stream_unary</span><span class="p">(</span>
 | 
	
		
			
				|  |  | +                    <span class="n">continuation</span><span class="p">,</span> <span class="n">client_call_details</span><span class="p">,</span> <span class="n">request_iterator</span><span class="p">)</span>
 | 
	
		
			
				|  |  | +            <span class="k">else</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +                <span class="k">return</span> <span class="n">StreamUnaryCall</span><span class="p">(</span>
 | 
	
		
			
				|  |  | +                    <span class="n">request_iterator</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                    <span class="n">_timeout_to_deadline</span><span class="p">(</span><span class="n">client_call_details</span><span class="o">.</span><span class="n">timeout</span><span class="p">),</span>
 | 
	
		
			
				|  |  | +                    <span class="n">client_call_details</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                    <span class="n">client_call_details</span><span class="o">.</span><span class="n">credentials</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                    <span class="n">client_call_details</span><span class="o">.</span><span class="n">wait_for_ready</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_channel</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                    <span class="n">client_call_details</span><span class="o">.</span><span class="n">method</span><span class="p">,</span> <span class="n">request_serializer</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                    <span class="n">response_deserializer</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_loop</span><span class="p">)</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        <span class="n">client_call_details</span> <span class="o">=</span> <span class="n">ClientCallDetails</span><span class="p">(</span><span class="n">method</span><span class="p">,</span> <span class="n">timeout</span><span class="p">,</span> <span class="n">metadata</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                                                <span class="n">credentials</span><span class="p">,</span> <span class="n">wait_for_ready</span><span class="p">)</span>
 | 
	
		
			
				|  |  | +        <span class="k">return</span> <span class="k">await</span> <span class="n">_run_interceptor</span><span class="p">(</span><span class="nb">iter</span><span class="p">(</span><span class="n">interceptors</span><span class="p">),</span> <span class="n">client_call_details</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                                      <span class="n">request_iterator</span><span class="p">)</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    <span class="k">def</span> <span class="nf">time_remaining</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">Optional</span><span class="p">[</span><span class="nb">float</span><span class="p">]:</span>
 | 
	
		
			
				|  |  | +        <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +<span class="k">class</span> <span class="nc">InterceptedStreamStreamCall</span><span class="p">(</span><span class="n">_InterceptedStreamResponseMixin</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                                  <span class="n">_InterceptedStreamRequestMixin</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                                  <span class="n">InterceptedCall</span><span class="p">,</span> <span class="n">_base_call</span><span class="o">.</span><span class="n">StreamStreamCall</span><span class="p">):</span>
 | 
	
		
			
				|  |  | +    <span class="sd">"""Used for running a `StreamStreamCall` wrapped by interceptors."""</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    <span class="n">_loop</span><span class="p">:</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">AbstractEventLoop</span>
 | 
	
		
			
				|  |  | +    <span class="n">_channel</span><span class="p">:</span> <span class="n">cygrpc</span><span class="o">.</span><span class="n">AioChannel</span>
 | 
	
		
			
				|  |  | +    <span class="n">_last_returned_call_from_interceptors</span> <span class="o">=</span> <span class="n">Optional</span><span class="p">[</span><span class="n">_base_call</span><span class="o">.</span><span class="n">UnaryStreamCall</span><span class="p">]</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    <span class="c1"># pylint: disable=too-many-arguments</span>
 | 
	
		
			
				|  |  | +    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">interceptors</span><span class="p">:</span> <span class="n">Sequence</span><span class="p">[</span><span class="n">StreamStreamClientInterceptor</span><span class="p">],</span>
 | 
	
		
			
				|  |  | +                 <span class="n">request_iterator</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">RequestIterableType</span><span class="p">],</span>
 | 
	
		
			
				|  |  | +                 <span class="n">timeout</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">float</span><span class="p">],</span> <span class="n">metadata</span><span class="p">:</span> <span class="n">Metadata</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                 <span class="n">credentials</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">grpc</span><span class="o">.</span><span class="n">CallCredentials</span><span class="p">],</span>
 | 
	
		
			
				|  |  | +                 <span class="n">wait_for_ready</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">],</span> <span class="n">channel</span><span class="p">:</span> <span class="n">cygrpc</span><span class="o">.</span><span class="n">AioChannel</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                 <span class="n">method</span><span class="p">:</span> <span class="nb">bytes</span><span class="p">,</span> <span class="n">request_serializer</span><span class="p">:</span> <span class="n">SerializingFunction</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                 <span class="n">response_deserializer</span><span class="p">:</span> <span class="n">DeserializingFunction</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                 <span class="n">loop</span><span class="p">:</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">AbstractEventLoop</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +        <span class="bp">self</span><span class="o">.</span><span class="n">_loop</span> <span class="o">=</span> <span class="n">loop</span>
 | 
	
		
			
				|  |  | +        <span class="bp">self</span><span class="o">.</span><span class="n">_channel</span> <span class="o">=</span> <span class="n">channel</span>
 | 
	
		
			
				|  |  | +        <span class="bp">self</span><span class="o">.</span><span class="n">_init_stream_response_mixin</span><span class="p">()</span>
 | 
	
		
			
				|  |  | +        <span class="n">request_iterator</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_init_stream_request_mixin</span><span class="p">(</span><span class="n">request_iterator</span><span class="p">)</span>
 | 
	
		
			
				|  |  | +        <span class="bp">self</span><span class="o">.</span><span class="n">_last_returned_call_from_interceptors</span> <span class="o">=</span> <span class="kc">None</span>
 | 
	
		
			
				|  |  | +        <span class="n">interceptors_task</span> <span class="o">=</span> <span class="n">loop</span><span class="o">.</span><span class="n">create_task</span><span class="p">(</span>
 | 
	
		
			
				|  |  | +            <span class="bp">self</span><span class="o">.</span><span class="n">_invoke</span><span class="p">(</span><span class="n">interceptors</span><span class="p">,</span> <span class="n">method</span><span class="p">,</span> <span class="n">timeout</span><span class="p">,</span> <span class="n">metadata</span><span class="p">,</span> <span class="n">credentials</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                         <span class="n">wait_for_ready</span><span class="p">,</span> <span class="n">request_iterator</span><span class="p">,</span> <span class="n">request_serializer</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                         <span class="n">response_deserializer</span><span class="p">))</span>
 | 
	
		
			
				|  |  | +        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">interceptors_task</span><span class="p">)</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    <span class="c1"># pylint: disable=too-many-arguments</span>
 | 
	
		
			
				|  |  | +    <span class="k">async</span> <span class="k">def</span> <span class="nf">_invoke</span><span class="p">(</span>
 | 
	
		
			
				|  |  | +            <span class="bp">self</span><span class="p">,</span> <span class="n">interceptors</span><span class="p">:</span> <span class="n">Sequence</span><span class="p">[</span><span class="n">StreamStreamClientInterceptor</span><span class="p">],</span>
 | 
	
		
			
				|  |  | +            <span class="n">method</span><span class="p">:</span> <span class="nb">bytes</span><span class="p">,</span> <span class="n">timeout</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">float</span><span class="p">],</span>
 | 
	
		
			
				|  |  | +            <span class="n">metadata</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Metadata</span><span class="p">],</span>
 | 
	
		
			
				|  |  | +            <span class="n">credentials</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">grpc</span><span class="o">.</span><span class="n">CallCredentials</span><span class="p">],</span>
 | 
	
		
			
				|  |  | +            <span class="n">wait_for_ready</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">],</span>
 | 
	
		
			
				|  |  | +            <span class="n">request_iterator</span><span class="p">:</span> <span class="n">RequestIterableType</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +            <span class="n">request_serializer</span><span class="p">:</span> <span class="n">SerializingFunction</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +            <span class="n">response_deserializer</span><span class="p">:</span> <span class="n">DeserializingFunction</span><span class="p">)</span> <span class="o">-></span> <span class="n">StreamStreamCall</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +        <span class="sd">"""Run the RPC call wrapped in interceptors"""</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        <span class="k">async</span> <span class="k">def</span> <span class="nf">_run_interceptor</span><span class="p">(</span>
 | 
	
		
			
				|  |  | +                <span class="n">interceptors</span><span class="p">:</span> <span class="n">Iterator</span><span class="p">[</span><span class="n">StreamStreamClientInterceptor</span><span class="p">],</span>
 | 
	
		
			
				|  |  | +                <span class="n">client_call_details</span><span class="p">:</span> <span class="n">ClientCallDetails</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                <span class="n">request_iterator</span><span class="p">:</span> <span class="n">RequestIterableType</span>
 | 
	
		
			
				|  |  | +        <span class="p">)</span> <span class="o">-></span> <span class="n">_base_call</span><span class="o">.</span><span class="n">StreamStreamCall</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            <span class="n">interceptor</span> <span class="o">=</span> <span class="nb">next</span><span class="p">(</span><span class="n">interceptors</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            <span class="k">if</span> <span class="n">interceptor</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +                <span class="n">continuation</span> <span class="o">=</span> <span class="n">functools</span><span class="o">.</span><span class="n">partial</span><span class="p">(</span><span class="n">_run_interceptor</span><span class="p">,</span> <span class="n">interceptors</span><span class="p">)</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                <span class="n">call_or_response_iterator</span> <span class="o">=</span> <span class="k">await</span> <span class="n">interceptor</span><span class="o">.</span><span class="n">intercept_stream_stream</span><span class="p">(</span>
 | 
	
		
			
				|  |  | +                    <span class="n">continuation</span><span class="p">,</span> <span class="n">client_call_details</span><span class="p">,</span> <span class="n">request_iterator</span><span class="p">)</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">call_or_response_iterator</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                              <span class="n">_base_call</span><span class="o">.</span><span class="n">StreamStreamCall</span><span class="p">):</span>
 | 
	
		
			
				|  |  | +                    <span class="bp">self</span><span class="o">.</span><span class="n">_last_returned_call_from_interceptors</span> <span class="o">=</span> <span class="n">call_or_response_iterator</span>
 | 
	
		
			
				|  |  | +                <span class="k">else</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +                    <span class="bp">self</span><span class="o">.</span><span class="n">_last_returned_call_from_interceptors</span> <span class="o">=</span> <span class="n">StreamStreamCallResponseIterator</span><span class="p">(</span>
 | 
	
		
			
				|  |  | +                        <span class="bp">self</span><span class="o">.</span><span class="n">_last_returned_call_from_interceptors</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                        <span class="n">call_or_response_iterator</span><span class="p">)</span>
 | 
	
		
			
				|  |  | +                <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_last_returned_call_from_interceptors</span>
 | 
	
		
			
				|  |  | +            <span class="k">else</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +                <span class="bp">self</span><span class="o">.</span><span class="n">_last_returned_call_from_interceptors</span> <span class="o">=</span> <span class="n">StreamStreamCall</span><span class="p">(</span>
 | 
	
		
			
				|  |  | +                    <span class="n">request_iterator</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                    <span class="n">_timeout_to_deadline</span><span class="p">(</span><span class="n">client_call_details</span><span class="o">.</span><span class="n">timeout</span><span class="p">),</span>
 | 
	
		
			
				|  |  | +                    <span class="n">client_call_details</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                    <span class="n">client_call_details</span><span class="o">.</span><span class="n">credentials</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                    <span class="n">client_call_details</span><span class="o">.</span><span class="n">wait_for_ready</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_channel</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                    <span class="n">client_call_details</span><span class="o">.</span><span class="n">method</span><span class="p">,</span> <span class="n">request_serializer</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                    <span class="n">response_deserializer</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_loop</span><span class="p">)</span>
 | 
	
		
			
				|  |  | +                <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_last_returned_call_from_interceptors</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        <span class="n">client_call_details</span> <span class="o">=</span> <span class="n">ClientCallDetails</span><span class="p">(</span><span class="n">method</span><span class="p">,</span> <span class="n">timeout</span><span class="p">,</span> <span class="n">metadata</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                                                <span class="n">credentials</span><span class="p">,</span> <span class="n">wait_for_ready</span><span class="p">)</span>
 | 
	
		
			
				|  |  | +        <span class="k">return</span> <span class="k">await</span> <span class="n">_run_interceptor</span><span class="p">(</span><span class="nb">iter</span><span class="p">(</span><span class="n">interceptors</span><span class="p">),</span> <span class="n">client_call_details</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                                      <span class="n">request_iterator</span><span class="p">)</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    <span class="k">def</span> <span class="nf">time_remaining</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">Optional</span><span class="p">[</span><span class="nb">float</span><span class="p">]:</span>
 | 
	
		
			
				|  |  | +        <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  <span class="k">class</span> <span class="nc">UnaryUnaryCallResponse</span><span class="p">(</span><span class="n">_base_call</span><span class="o">.</span><span class="n">UnaryUnaryCall</span><span class="p">):</span>
 | 
	
	
		
			
				|  | @@ -446,10 +967,10 @@
 | 
	
		
			
				|  |  |      <span class="k">def</span> <span class="nf">time_remaining</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">Optional</span><span class="p">[</span><span class="nb">float</span><span class="p">]:</span>
 | 
	
		
			
				|  |  |          <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    <span class="k">async</span> <span class="k">def</span> <span class="nf">initial_metadata</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">Optional</span><span class="p">[</span><span class="n">MetadataType</span><span class="p">]:</span>
 | 
	
		
			
				|  |  | +    <span class="k">async</span> <span class="k">def</span> <span class="nf">initial_metadata</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">Optional</span><span class="p">[</span><span class="n">Metadata</span><span class="p">]:</span>
 | 
	
		
			
				|  |  |          <span class="k">return</span> <span class="kc">None</span>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    <span class="k">async</span> <span class="k">def</span> <span class="nf">trailing_metadata</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">Optional</span><span class="p">[</span><span class="n">MetadataType</span><span class="p">]:</span>
 | 
	
		
			
				|  |  | +    <span class="k">async</span> <span class="k">def</span> <span class="nf">trailing_metadata</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">Optional</span><span class="p">[</span><span class="n">Metadata</span><span class="p">]:</span>
 | 
	
		
			
				|  |  |          <span class="k">return</span> <span class="kc">None</span>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      <span class="k">async</span> <span class="k">def</span> <span class="nf">code</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">grpc</span><span class="o">.</span><span class="n">StatusCode</span><span class="p">:</span>
 | 
	
	
		
			
				|  | @@ -470,6 +991,90 @@
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      <span class="k">async</span> <span class="k">def</span> <span class="nf">wait_for_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
 | 
	
		
			
				|  |  |          <span class="k">pass</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +<span class="k">class</span> <span class="nc">_StreamCallResponseIterator</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    <span class="n">_call</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="n">_base_call</span><span class="o">.</span><span class="n">UnaryStreamCall</span><span class="p">,</span> <span class="n">_base_call</span><span class="o">.</span><span class="n">StreamStreamCall</span><span class="p">]</span>
 | 
	
		
			
				|  |  | +    <span class="n">_response_iterator</span><span class="p">:</span> <span class="n">AsyncIterable</span><span class="p">[</span><span class="n">ResponseType</span><span class="p">]</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">call</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="n">_base_call</span><span class="o">.</span><span class="n">UnaryStreamCall</span><span class="p">,</span> <span class="n">_base_call</span><span class="o">.</span>
 | 
	
		
			
				|  |  | +                                   <span class="n">StreamStreamCall</span><span class="p">],</span>
 | 
	
		
			
				|  |  | +                 <span class="n">response_iterator</span><span class="p">:</span> <span class="n">AsyncIterable</span><span class="p">[</span><span class="n">ResponseType</span><span class="p">])</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +        <span class="bp">self</span><span class="o">.</span><span class="n">_response_iterator</span> <span class="o">=</span> <span class="n">response_iterator</span>
 | 
	
		
			
				|  |  | +        <span class="bp">self</span><span class="o">.</span><span class="n">_call</span> <span class="o">=</span> <span class="n">call</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    <span class="k">def</span> <span class="nf">cancel</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="nb">bool</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_call</span><span class="o">.</span><span class="n">cancel</span><span class="p">()</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    <span class="k">def</span> <span class="nf">cancelled</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="nb">bool</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_call</span><span class="o">.</span><span class="n">cancelled</span><span class="p">()</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    <span class="k">def</span> <span class="nf">done</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="nb">bool</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_call</span><span class="o">.</span><span class="n">done</span><span class="p">()</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    <span class="k">def</span> <span class="nf">add_done_callback</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">callback</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +        <span class="bp">self</span><span class="o">.</span><span class="n">_call</span><span class="o">.</span><span class="n">add_done_callback</span><span class="p">(</span><span class="n">callback</span><span class="p">)</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    <span class="k">def</span> <span class="nf">time_remaining</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">Optional</span><span class="p">[</span><span class="nb">float</span><span class="p">]:</span>
 | 
	
		
			
				|  |  | +        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_call</span><span class="o">.</span><span class="n">time_remaining</span><span class="p">()</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    <span class="k">async</span> <span class="k">def</span> <span class="nf">initial_metadata</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">Optional</span><span class="p">[</span><span class="n">Metadata</span><span class="p">]:</span>
 | 
	
		
			
				|  |  | +        <span class="k">return</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">_call</span><span class="o">.</span><span class="n">initial_metadata</span><span class="p">()</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    <span class="k">async</span> <span class="k">def</span> <span class="nf">trailing_metadata</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">Optional</span><span class="p">[</span><span class="n">Metadata</span><span class="p">]:</span>
 | 
	
		
			
				|  |  | +        <span class="k">return</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">_call</span><span class="o">.</span><span class="n">trailing_metadata</span><span class="p">()</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    <span class="k">async</span> <span class="k">def</span> <span class="nf">code</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">grpc</span><span class="o">.</span><span class="n">StatusCode</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +        <span class="k">return</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">_call</span><span class="o">.</span><span class="n">code</span><span class="p">()</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    <span class="k">async</span> <span class="k">def</span> <span class="nf">details</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +        <span class="k">return</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">_call</span><span class="o">.</span><span class="n">details</span><span class="p">()</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    <span class="k">async</span> <span class="k">def</span> <span class="nf">debug_error_string</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
 | 
	
		
			
				|  |  | +        <span class="k">return</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">_call</span><span class="o">.</span><span class="n">debug_error_string</span><span class="p">()</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    <span class="k">def</span> <span class="fm">__aiter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
 | 
	
		
			
				|  |  | +        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_response_iterator</span><span class="o">.</span><span class="fm">__aiter__</span><span class="p">()</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    <span class="k">async</span> <span class="k">def</span> <span class="nf">wait_for_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +        <span class="k">return</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">_call</span><span class="o">.</span><span class="n">wait_for_connection</span><span class="p">()</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +<span class="k">class</span> <span class="nc">UnaryStreamCallResponseIterator</span><span class="p">(</span><span class="n">_StreamCallResponseIterator</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                                      <span class="n">_base_call</span><span class="o">.</span><span class="n">UnaryStreamCall</span><span class="p">):</span>
 | 
	
		
			
				|  |  | +    <span class="sd">"""UnaryStreamCall class wich uses an alternative response iterator."""</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    <span class="k">async</span> <span class="k">def</span> <span class="nf">read</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">ResponseType</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +        <span class="c1"># Behind the scenes everyting goes through the</span>
 | 
	
		
			
				|  |  | +        <span class="c1"># async iterator. So this path should not be reached.</span>
 | 
	
		
			
				|  |  | +        <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +<span class="k">class</span> <span class="nc">StreamStreamCallResponseIterator</span><span class="p">(</span><span class="n">_StreamCallResponseIterator</span><span class="p">,</span>
 | 
	
		
			
				|  |  | +                                       <span class="n">_base_call</span><span class="o">.</span><span class="n">StreamStreamCall</span><span class="p">):</span>
 | 
	
		
			
				|  |  | +    <span class="sd">"""StreamStreamCall class wich uses an alternative response iterator."""</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    <span class="k">async</span> <span class="k">def</span> <span class="nf">read</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">ResponseType</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +        <span class="c1"># Behind the scenes everyting goes through the</span>
 | 
	
		
			
				|  |  | +        <span class="c1"># async iterator. So this path should not be reached.</span>
 | 
	
		
			
				|  |  | +        <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    <span class="k">async</span> <span class="k">def</span> <span class="nf">write</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">:</span> <span class="n">RequestType</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +        <span class="c1"># Behind the scenes everyting goes through the</span>
 | 
	
		
			
				|  |  | +        <span class="c1"># async iterator provided by the InterceptedStreamStreamCall.</span>
 | 
	
		
			
				|  |  | +        <span class="c1"># So this path should not be reached.</span>
 | 
	
		
			
				|  |  | +        <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    <span class="k">async</span> <span class="k">def</span> <span class="nf">done_writing</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +        <span class="c1"># Behind the scenes everyting goes through the</span>
 | 
	
		
			
				|  |  | +        <span class="c1"># async iterator provided by the InterceptedStreamStreamCall.</span>
 | 
	
		
			
				|  |  | +        <span class="c1"># So this path should not be reached.</span>
 | 
	
		
			
				|  |  | +        <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    <span class="nd">@property</span>
 | 
	
		
			
				|  |  | +    <span class="k">def</span> <span class="nf">_done_writing_flag</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="nb">bool</span><span class="p">:</span>
 | 
	
		
			
				|  |  | +        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_call</span><span class="o">.</span><span class="n">_done_writing_flag</span>
 | 
	
		
			
				|  |  |  </pre></div>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |            </div>
 | 
	
	
		
			
				|  | @@ -479,7 +1084,7 @@
 | 
	
		
			
				|  |  |      <div class="clearer"></div>
 | 
	
		
			
				|  |  |    </div>
 | 
	
		
			
				|  |  |      <div class="footer">
 | 
	
		
			
				|  |  | -      ©2018, The gRPC Authors.
 | 
	
		
			
				|  |  | +      ©2020, The gRPC Authors.
 | 
	
		
			
				|  |  |        
 | 
	
		
			
				|  |  |      </div>
 | 
	
		
			
				|  |  |  
 |