Просмотр исходного кода

Auto-update Python documentation

Richard Belleville 5 лет назад
Родитель
Сommit
3f66501c9c
47 измененных файлов с 2045 добавлено и 1040 удалено
  1. 1 1
      python/.buildinfo
  2. BIN
      python/.doctrees/environment.pickle
  3. BIN
      python/.doctrees/glossary.doctree
  4. BIN
      python/.doctrees/grpc.doctree
  5. BIN
      python/.doctrees/grpc_asyncio.doctree
  6. BIN
      python/.doctrees/grpc_channelz.doctree
  7. BIN
      python/.doctrees/grpc_health_checking.doctree
  8. BIN
      python/.doctrees/grpc_reflection.doctree
  9. BIN
      python/.doctrees/grpc_status.doctree
  10. BIN
      python/.doctrees/grpc_testing.doctree
  11. BIN
      python/.doctrees/index.doctree
  12. 55 17
      python/_modules/grpc.html
  13. 8 7
      python/_modules/grpc/experimental/aio/_base_call.html
  14. 14 14
      python/_modules/grpc/experimental/aio/_base_channel.html
  15. 52 11
      python/_modules/grpc/experimental/aio/_base_server.html
  16. 39 37
      python/_modules/grpc/experimental/aio/_call.html
  17. 113 67
      python/_modules/grpc/experimental/aio/_channel.html
  18. 714 109
      python/_modules/grpc/experimental/aio/_interceptor.html
  19. 11 10
      python/_modules/grpc/experimental/aio/_server.html
  20. 242 0
      python/_modules/grpc_channelz/v1/_servicer.html
  21. 58 126
      python/_modules/grpc_channelz/v1/channelz.html
  22. 4 3
      python/_modules/grpc_health/v1/health.html
  23. 49 95
      python/_modules/grpc_reflection/v1alpha/reflection.html
  24. 20 19
      python/_modules/grpc_status/rpc_status.html
  25. 4 3
      python/_modules/grpc_testing.html
  26. 6 4
      python/_modules/index.html
  27. 21 0
      python/_sources/glossary.rst.txt
  28. 2 2
      python/_sources/grpc.rst.txt
  29. 7 18
      python/_sources/grpc_asyncio.rst.txt
  30. 114 27
      python/_static/basic.css
  31. 1 1
      python/_static/documentation_options.js
  32. 265 157
      python/_static/jquery-3.5.1.js
  33. 0 1
      python/_static/jquery.js
  34. 37 37
      python/genindex.html
  35. 23 4
      python/glossary.html
  36. 24 23
      python/grpc.html
  37. 116 211
      python/grpc_asyncio.html
  38. 15 13
      python/grpc_channelz.html
  39. 4 3
      python/grpc_health_checking.html
  40. 4 3
      python/grpc_reflection.html
  41. 4 3
      python/grpc_status.html
  42. 4 3
      python/grpc_testing.html
  43. 6 5
      python/index.html
  44. BIN
      python/objects.inv
  45. 4 3
      python/py-modindex.html
  46. 4 3
      python/search.html
  47. 0 0
      python/searchindex.js

+ 1 - 1
python/.buildinfo

@@ -1,4 +1,4 @@
 # Sphinx build info version 1
 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
-config: c236cd549ae8244821e66275976488a1
+config: 7defff909b49dfc8fa09a509a9048c22
 tags: 645f666f9bcd5a90fca523b33c5a78b7

BIN
python/.doctrees/environment.pickle


BIN
python/.doctrees/glossary.doctree


BIN
python/.doctrees/grpc.doctree


BIN
python/.doctrees/grpc_asyncio.doctree


BIN
python/.doctrees/grpc_channelz.doctree


BIN
python/.doctrees/grpc_health_checking.doctree


BIN
python/.doctrees/grpc_reflection.doctree


BIN
python/.doctrees/grpc_status.doctree


BIN
python/.doctrees/grpc_testing.doctree


BIN
python/.doctrees/index.doctree


+ 55 - 17
python/_modules/grpc.html

@@ -4,7 +4,8 @@
 <html lang="en">
   <head>
     <meta charset="utf-8" />
-    <title>grpc &#8212; gRPC Python 1.29.0 documentation</title>
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>grpc &#8212; 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>
 
 
 
@@ -274,7 +275,7 @@
 
 <span class="sd">        The callback will be passed this Future object describing the outcome</span>
 <span class="sd">        of the computation.  Callbacks will be invoked after the future is</span>
-<span class="sd">        terimated, whether successfully or not.</span>
+<span class="sd">        terminated, whether successfully or not.</span>
 
 <span class="sd">        If the computation has already completed, the callback will be called</span>
 <span class="sd">        immediately.</span>
@@ -501,8 +502,8 @@
 <span class="sd">      metadata: Optional :term:`metadata` to be transmitted to</span>
 <span class="sd">        the service-side of 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 t</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">      compression: An element of grpc.compression, e.g.</span>
 <span class="sd">        grpc.compression.Gzip. This is an EXPERIMENTAL option.</span>
 <span class="sd">    &quot;&quot;&quot;</span></div>
@@ -777,7 +778,7 @@
 <span class="sd">          credentials: An optional CallCredentials for the RPC. Only valid for</span>
 <span class="sd">            secure Channel.</span>
 <span class="sd">          wait_for_ready: This is an EXPERIMENTAL argument. An optional</span>
-<span class="sd">            flag to enable wait for ready mechanism</span>
+<span class="sd">            flag to enable :term:`wait_for_ready` mechanism.</span>
 <span class="sd">          compression: An element of grpc.compression, e.g.</span>
 <span class="sd">            grpc.compression.Gzip. This is an EXPERIMENTAL option.</span>
 
@@ -810,7 +811,7 @@
 <span class="sd">          credentials: An optional CallCredentials for the RPC. Only valid for</span>
 <span class="sd">            secure Channel.</span>
 <span class="sd">          wait_for_ready: This is an EXPERIMENTAL argument. An optional</span>
-<span class="sd">            flag to enable wait for ready mechanism</span>
+<span class="sd">            flag to enable :term:`wait_for_ready` mechanism.</span>
 <span class="sd">          compression: An element of grpc.compression, e.g.</span>
 <span class="sd">            grpc.compression.Gzip. This is an EXPERIMENTAL option.</span>
 
@@ -843,7 +844,7 @@
 <span class="sd">          credentials: An optional CallCredentials for the RPC. Only valid for</span>
 <span class="sd">            secure Channel.</span>
 <span class="sd">          wait_for_ready: This is an EXPERIMENTAL argument. An optional</span>
-<span class="sd">            flag to enable wait for ready mechanism</span>
+<span class="sd">            flag to enable :term:`wait_for_ready` mechanism.</span>
 <span class="sd">          compression: An element of grpc.compression, e.g.</span>
 <span class="sd">            grpc.compression.Gzip. This is an EXPERIMENTAL option.</span>
 
@@ -879,7 +880,7 @@
 <span class="sd">          credentials: An optional CallCredentials for the RPC. Only valid for</span>
 <span class="sd">            secure Channel.</span>
 <span class="sd">          wait_for_ready: This is an EXPERIMENTAL argument. An optional</span>
-<span class="sd">            flag to enable wait for ready mechanism</span>
+<span class="sd">            flag to enable :term:`wait_for_ready` mechanism.</span>
 <span class="sd">          compression: An element of grpc.compression, e.g.</span>
 <span class="sd">            grpc.compression.Gzip. This is an EXPERIMENTAL option.</span>
 
@@ -915,7 +916,7 @@
 <span class="sd">          credentials: An optional CallCredentials for the RPC. Only valid for</span>
 <span class="sd">            secure Channel.</span>
 <span class="sd">          wait_for_ready: This is an EXPERIMENTAL argument. An optional</span>
-<span class="sd">            flag to enable wait for ready mechanism</span>
+<span class="sd">            flag to enable :term:`wait_for_ready` mechanism.</span>
 <span class="sd">          compression: An element of grpc.compression, e.g.</span>
 <span class="sd">            grpc.compression.Gzip. This is an EXPERIMENTAL option.</span>
 
@@ -949,7 +950,7 @@
 <span class="sd">          credentials: An optional CallCredentials for the RPC. Only valid for</span>
 <span class="sd">            secure Channel.</span>
 <span class="sd">          wait_for_ready: This is an EXPERIMENTAL argument. An optional</span>
-<span class="sd">            flag to enable wait for ready mechanism</span>
+<span class="sd">            flag to enable :term:`wait_for_ready` mechanism.</span>
 <span class="sd">          compression: An element of grpc.compression, e.g.</span>
 <span class="sd">            grpc.compression.Gzip. This is an EXPERIMENTAL option.</span>
 
@@ -982,7 +983,7 @@
 <span class="sd">          credentials: An optional CallCredentials for the RPC. Only valid for</span>
 <span class="sd">            secure Channel.</span>
 <span class="sd">          wait_for_ready: This is an EXPERIMENTAL argument. An optional</span>
-<span class="sd">            flag to enable wait for ready mechanism</span>
+<span class="sd">            flag to enable :term:`wait_for_ready` mechanism.</span>
 <span class="sd">          compression: An element of grpc.compression, e.g.</span>
 <span class="sd">            grpc.compression.Gzip. This is an EXPERIMENTAL option.</span>
 
@@ -1018,7 +1019,7 @@
 <span class="sd">          credentials: An optional CallCredentials for the RPC. Only valid for</span>
 <span class="sd">            secure Channel.</span>
 <span class="sd">          wait_for_ready: This is an EXPERIMENTAL argument. An optional</span>
-<span class="sd">            flag to enable wait for ready mechanism</span>
+<span class="sd">            flag to enable :term:`wait_for_ready` mechanism.</span>
 <span class="sd">          compression: An element of grpc.compression, e.g.</span>
 <span class="sd">            grpc.compression.Gzip. This is an EXPERIMENTAL option.</span>
 
@@ -1920,6 +1921,41 @@
         <span class="n">_cygrpc</span><span class="o">.</span><span class="n">server_credentials_local</span><span class="p">(</span><span class="n">local_connect_type</span><span class="o">.</span><span class="n">value</span><span class="p">))</span></div>
 
 
+<span class="k">def</span> <span class="nf">alts_channel_credentials</span><span class="p">(</span><span class="n">service_accounts</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;Creates a ChannelCredentials for use with an ALTS-enabled Channel.</span>
+
+<span class="sd">    This is an EXPERIMENTAL API.</span>
+<span class="sd">    ALTS credentials API can only be used in GCP environment as it relies on</span>
+<span class="sd">    handshaker service being available. For more info about ALTS see</span>
+<span class="sd">    https://cloud.google.com/security/encryption-in-transit/application-layer-transport-security</span>
+
+<span class="sd">    Args:</span>
+<span class="sd">      service_accounts: A list of server identities accepted by the client.</span>
+<span class="sd">        If target service accounts are provided and none of them matches the</span>
+<span class="sd">        peer identity of the server, handshake will fail. The arg can be empty</span>
+<span class="sd">        if the client does not have any information about trusted server</span>
+<span class="sd">        identity.</span>
+<span class="sd">    Returns:</span>
+<span class="sd">      A ChannelCredentials for use with an ALTS-enabled Channel</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="k">return</span> <span class="n">ChannelCredentials</span><span class="p">(</span>
+        <span class="n">_cygrpc</span><span class="o">.</span><span class="n">channel_credentials_alts</span><span class="p">(</span><span class="n">service_accounts</span> <span class="ow">or</span> <span class="p">[]))</span>
+
+
+<span class="k">def</span> <span class="nf">alts_server_credentials</span><span class="p">():</span>
+    <span class="sd">&quot;&quot;&quot;Creates a ServerCredentials for use with an ALTS-enabled connection.</span>
+
+<span class="sd">    This is an EXPERIMENTAL API.</span>
+<span class="sd">    ALTS credentials API can only be used in GCP environment as it relies on</span>
+<span class="sd">    handshaker service being available. For more info about ALTS see</span>
+<span class="sd">    https://cloud.google.com/security/encryption-in-transit/application-layer-transport-security</span>
+
+<span class="sd">    Returns:</span>
+<span class="sd">      A ServerCredentials for use with an ALTS-enabled Server</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="k">return</span> <span class="n">ServerCredentials</span><span class="p">(</span><span class="n">_cygrpc</span><span class="o">.</span><span class="n">server_credentials_alts</span><span class="p">())</span>
+
+
 <div class="viewcode-block" id="channel_ready_future"><a class="viewcode-back" href="../grpc.html#grpc.channel_ready_future">[docs]</a><span class="k">def</span> <span class="nf">channel_ready_future</span><span class="p">(</span><span class="n">channel</span><span class="p">):</span>
     <span class="sd">&quot;&quot;&quot;Creates a Future that tracks when a Channel is ready.</span>
 
@@ -1944,7 +1980,7 @@
 
 <span class="sd">    Args:</span>
 <span class="sd">      target: The server address</span>
-<span class="sd">      options: An optional list of key-value pairs (channel args</span>
+<span class="sd">      options: An optional list of key-value pairs (:term:`channel_arguments`</span>
 <span class="sd">        in gRPC Core runtime) to configure the channel.</span>
 <span class="sd">      compression: An optional value indicating the compression method to be</span>
 <span class="sd">        used over the lifetime of the channel. This is an EXPERIMENTAL option.</span>
@@ -1965,7 +2001,7 @@
 <span class="sd">    Args:</span>
 <span class="sd">      target: The server address.</span>
 <span class="sd">      credentials: A ChannelCredentials instance.</span>
-<span class="sd">      options: An optional list of key-value pairs (channel args</span>
+<span class="sd">      options: An optional list of key-value pairs (:term:`channel_arguments`</span>
 <span class="sd">        in gRPC Core runtime) to configure the channel.</span>
 <span class="sd">      compression: An optional value indicating the compression method to be</span>
 <span class="sd">        used over the lifetime of the channel. This is an EXPERIMENTAL option.</span>
@@ -2029,7 +2065,7 @@
 <span class="sd">        and optionally manipulate the incoming RPCs before handing them over to</span>
 <span class="sd">        handlers. The interceptors are given control in the order they are</span>
 <span class="sd">        specified. This is an EXPERIMENTAL API.</span>
-<span class="sd">      options: An optional list of key-value pairs (channel args in gRPC runtime)</span>
+<span class="sd">      options: An optional list of key-value pairs (:term:`channel_arguments` in gRPC runtime)</span>
 <span class="sd">        to configure the channel.</span>
 <span class="sd">      maximum_concurrent_rpcs: The maximum number of concurrent RPCs this server</span>
 <span class="sd">        will service before returning RESOURCE_EXHAUSTED status, or None to</span>
@@ -2123,6 +2159,8 @@
     <span class="s1">&#39;composite_channel_credentials&#39;</span><span class="p">,</span>
     <span class="s1">&#39;local_channel_credentials&#39;</span><span class="p">,</span>
     <span class="s1">&#39;local_server_credentials&#39;</span><span class="p">,</span>
+    <span class="s1">&#39;alts_channel_credentials&#39;</span><span class="p">,</span>
+    <span class="s1">&#39;alts_server_credentials&#39;</span><span class="p">,</span>
     <span class="s1">&#39;ssl_server_credentials&#39;</span><span class="p">,</span>
     <span class="s1">&#39;ssl_server_certificate_configuration&#39;</span><span class="p">,</span>
     <span class="s1">&#39;dynamic_ssl_server_credentials&#39;</span><span class="p">,</span>
@@ -2160,7 +2198,7 @@
     <div class="clearer"></div>
   </div>
     <div class="footer">
-      &copy;2018, The gRPC Authors.
+      &copy;2020, The gRPC Authors.
       
     </div>
 

+ 8 - 7
python/_modules/grpc/experimental/aio/_base_call.html

@@ -4,7 +4,8 @@
 <html lang="en">
   <head>
     <meta charset="utf-8" />
-    <title>grpc.experimental.aio._base_call &#8212; gRPC Python 1.29.0 documentation</title>
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>grpc.experimental.aio._base_call &#8212; 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>
 
 
 
@@ -112,8 +113,8 @@
 
 <span class="kn">import</span> <span class="nn">grpc</span>
 
-<span class="kn">from</span> <span class="nn">._typing</span> <span class="kn">import</span> <span class="p">(</span><span class="n">DoneCallbackType</span><span class="p">,</span> <span class="n">EOFType</span><span class="p">,</span> <span class="n">MetadataType</span><span class="p">,</span> <span class="n">RequestType</span><span class="p">,</span>
-                      <span class="n">ResponseType</span><span class="p">)</span>
+<span class="kn">from</span> <span class="nn">._typing</span> <span class="kn">import</span> <span class="p">(</span><span class="n">DoneCallbackType</span><span class="p">,</span> <span class="n">EOFType</span><span class="p">,</span> <span class="n">RequestType</span><span class="p">,</span> <span class="n">ResponseType</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">__all__</span> <span class="o">=</span> <span class="s1">&#39;RpcContext&#39;</span><span class="p">,</span> <span class="s1">&#39;Call&#39;</span><span class="p">,</span> <span class="s1">&#39;UnaryUnaryCall&#39;</span><span class="p">,</span> <span class="s1">&#39;UnaryStreamCall&#39;</span>
 
@@ -175,7 +176,7 @@
     <span class="sd">&quot;&quot;&quot;The abstract base class of an RPC on the client-side.&quot;&quot;&quot;</span>
 
 <div class="viewcode-block" id="Call.initial_metadata"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.Call.initial_metadata">[docs]</a>    <span class="nd">@abstractmethod</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">-&gt;</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">-&gt;</span> <span class="n">Metadata</span><span class="p">:</span>
         <span class="sd">&quot;&quot;&quot;Accesses the initial metadata sent by the server.</span>
 
 <span class="sd">        Returns:</span>
@@ -183,7 +184,7 @@
 <span class="sd">        &quot;&quot;&quot;</span></div>
 
 <div class="viewcode-block" id="Call.trailing_metadata"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.Call.trailing_metadata">[docs]</a>    <span class="nd">@abstractmethod</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">-&gt;</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">-&gt;</span> <span class="n">Metadata</span><span class="p">:</span>
         <span class="sd">&quot;&quot;&quot;Accesses the trailing metadata sent by the server.</span>
 
 <span class="sd">        Returns:</span>
@@ -340,7 +341,7 @@
     <div class="clearer"></div>
   </div>
     <div class="footer">
-      &copy;2018, The gRPC Authors.
+      &copy;2020, The gRPC Authors.
       
     </div>
 

+ 14 - 14
python/_modules/grpc/experimental/aio/_base_channel.html

@@ -4,7 +4,8 @@
 <html lang="en">
   <head>
     <meta charset="utf-8" />
-    <title>grpc.experimental.aio._base_channel &#8212; gRPC Python 1.29.0 documentation</title>
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>grpc.experimental.aio._base_channel &#8212; 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>
 
 
 
@@ -108,10 +109,9 @@
 <span class="kn">import</span> <span class="nn">grpc</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">._typing</span> <span class="kn">import</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">RequestIterableType</span><span class="p">,</span>
+<span class="kn">from</span> <span class="nn">._typing</span> <span class="kn">import</span> <span class="p">(</span><span class="n">DeserializingFunction</span><span class="p">,</span> <span class="n">RequestIterableType</span><span class="p">,</span>
                       <span class="n">SerializingFunction</span><span class="p">)</span>
-
-<span class="n">_IMMUTABLE_EMPTY_TUPLE</span> <span class="o">=</span> <span class="nb">tuple</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>
 
 
 <div class="viewcode-block" id="UnaryUnaryMultiCallable"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.UnaryUnaryMultiCallable">[docs]</a><span class="k">class</span> <span class="nc">UnaryUnaryMultiCallable</span><span class="p">(</span><span class="n">abc</span><span class="o">.</span><span class="n">ABC</span><span class="p">):</span>
@@ -122,7 +122,7 @@
                  <span class="n">request</span><span class="p">:</span> <span class="n">Any</span><span class="p">,</span>
                  <span class="o">*</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="o">=</span> <span class="kc">None</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="o">=</span> <span class="n">_IMMUTABLE_EMPTY_TUPLE</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="o">=</span> <span class="kc">None</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="o">=</span> <span class="kc">None</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="o">=</span> <span class="kc">None</span><span class="p">,</span>
                  <span class="n">compression</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">Compression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
@@ -138,7 +138,7 @@
 <span class="sd">          credentials: An optional CallCredentials for the RPC. Only valid for</span>
 <span class="sd">            secure Channel.</span>
 <span class="sd">          wait_for_ready: This is an EXPERIMENTAL argument. An optional</span>
-<span class="sd">            flag to enable wait for ready mechanism</span>
+<span class="sd">            flag to enable :term:`wait_for_ready` mechanism.</span>
 <span class="sd">          compression: An element of grpc.compression, e.g.</span>
 <span class="sd">            grpc.compression.Gzip. This is an EXPERIMENTAL option.</span>
 
@@ -160,7 +160,7 @@
                  <span class="n">request</span><span class="p">:</span> <span class="n">Any</span><span class="p">,</span>
                  <span class="o">*</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="o">=</span> <span class="kc">None</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="o">=</span> <span class="n">_IMMUTABLE_EMPTY_TUPLE</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="o">=</span> <span class="kc">None</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="o">=</span> <span class="kc">None</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="o">=</span> <span class="kc">None</span><span class="p">,</span>
                  <span class="n">compression</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">Compression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
@@ -176,7 +176,7 @@
 <span class="sd">          credentials: An optional CallCredentials for the RPC. Only valid for</span>
 <span class="sd">            secure Channel.</span>
 <span class="sd">          wait_for_ready: This is an EXPERIMENTAL argument. An optional</span>
-<span class="sd">            flag to enable wait for ready mechanism</span>
+<span class="sd">            flag to enable :term:`wait_for_ready` mechanism.</span>
 <span class="sd">          compression: An element of grpc.compression, e.g.</span>
 <span class="sd">            grpc.compression.Gzip. This is an EXPERIMENTAL option.</span>
 
@@ -197,7 +197,7 @@
     <span class="k">def</span> <span class="fm">__call__</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="o">=</span> <span class="kc">None</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="o">=</span> <span class="kc">None</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="o">=</span> <span class="n">_IMMUTABLE_EMPTY_TUPLE</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="o">=</span> <span class="kc">None</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="o">=</span> <span class="kc">None</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="o">=</span> <span class="kc">None</span><span class="p">,</span>
                  <span class="n">compression</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">Compression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
@@ -214,7 +214,7 @@
 <span class="sd">          credentials: An optional CallCredentials for the RPC. Only valid for</span>
 <span class="sd">            secure Channel.</span>
 <span class="sd">          wait_for_ready: This is an EXPERIMENTAL argument. An optional</span>
-<span class="sd">            flag to enable wait for ready mechanism</span>
+<span class="sd">            flag to enable :term:`wait_for_ready` mechanism.</span>
 <span class="sd">          compression: An element of grpc.compression, e.g.</span>
 <span class="sd">            grpc.compression.Gzip. This is an EXPERIMENTAL option.</span>
 
@@ -235,7 +235,7 @@
     <span class="k">def</span> <span class="fm">__call__</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="o">=</span> <span class="kc">None</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="o">=</span> <span class="kc">None</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="o">=</span> <span class="n">_IMMUTABLE_EMPTY_TUPLE</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="o">=</span> <span class="kc">None</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="o">=</span> <span class="kc">None</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="o">=</span> <span class="kc">None</span><span class="p">,</span>
                  <span class="n">compression</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">Compression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
@@ -252,7 +252,7 @@
 <span class="sd">          credentials: An optional CallCredentials for the RPC. Only valid for</span>
 <span class="sd">            secure Channel.</span>
 <span class="sd">          wait_for_ready: This is an EXPERIMENTAL argument. An optional</span>
-<span class="sd">            flag to enable wait for ready mechanism</span>
+<span class="sd">            flag to enable :term:`wait_for_ready` mechanism.</span>
 <span class="sd">          compression: An element of grpc.compression, e.g.</span>
 <span class="sd">            grpc.compression.Gzip. This is an EXPERIMENTAL option.</span>
 
@@ -444,7 +444,7 @@
     <div class="clearer"></div>
   </div>
     <div class="footer">
-      &copy;2018, The gRPC Authors.
+      &copy;2020, The gRPC Authors.
       
     </div>
 

+ 52 - 11
python/_modules/grpc/experimental/aio/_base_server.html

@@ -4,7 +4,8 @@
 <html lang="en">
   <head>
     <meta charset="utf-8" />
-    <title>grpc.experimental.aio._base_server &#8212; gRPC Python 1.29.0 documentation</title>
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>grpc.experimental.aio._base_server &#8212; 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>
 
 
 
@@ -103,11 +104,12 @@
 <span class="sd">&quot;&quot;&quot;Abstract base classes for server-side classes.&quot;&quot;&quot;</span>
 
 <span class="kn">import</span> <span class="nn">abc</span>
-<span class="kn">from</span> <span class="nn">typing</span> <span class="kn">import</span> <span class="n">Generic</span><span class="p">,</span> <span class="n">Optional</span><span class="p">,</span> <span class="n">Sequence</span>
+<span class="kn">from</span> <span class="nn">typing</span> <span class="kn">import</span> <span class="n">Generic</span><span class="p">,</span> <span class="n">Mapping</span><span class="p">,</span> <span class="n">Optional</span><span class="p">,</span> <span class="n">Iterable</span><span class="p">,</span> <span class="n">Sequence</span>
 
 <span class="kn">import</span> <span class="nn">grpc</span>
 
-<span class="kn">from</span> <span class="nn">._typing</span> <span class="kn">import</span> <span class="n">MetadataType</span><span class="p">,</span> <span class="n">RequestType</span><span class="p">,</span> <span class="n">ResponseType</span>
+<span class="kn">from</span> <span class="nn">._typing</span> <span class="kn">import</span> <span class="n">RequestType</span><span class="p">,</span> <span class="n">ResponseType</span>
+<span class="kn">from</span> <span class="nn">._metadata</span> <span class="kn">import</span> <span class="n">Metadata</span>
 
 
 <div class="viewcode-block" id="Server"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.Server">[docs]</a><span class="k">class</span> <span class="nc">Server</span><span class="p">(</span><span class="n">abc</span><span class="o">.</span><span class="n">ABC</span><span class="p">):</span>
@@ -246,8 +248,7 @@
 <span class="sd">        &quot;&quot;&quot;</span></div>
 
 <div class="viewcode-block" id="ServicerContext.send_initial_metadata"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.ServicerContext.send_initial_metadata">[docs]</a>    <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
-    <span class="k">async</span> <span class="k">def</span> <span class="nf">send_initial_metadata</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
-                                    <span class="n">initial_metadata</span><span class="p">:</span> <span class="n">MetadataType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+    <span class="k">async</span> <span class="k">def</span> <span class="nf">send_initial_metadata</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">initial_metadata</span><span class="p">:</span> <span class="n">Metadata</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
         <span class="sd">&quot;&quot;&quot;Sends the initial metadata value to the client.</span>
 
 <span class="sd">        This method need not be called by implementations if they have no</span>
@@ -259,7 +260,7 @@
 
 <div class="viewcode-block" id="ServicerContext.abort"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.ServicerContext.abort">[docs]</a>    <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
     <span class="k">async</span> <span class="k">def</span> <span class="nf">abort</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">code</span><span class="p">:</span> <span class="n">grpc</span><span class="o">.</span><span class="n">StatusCode</span><span class="p">,</span> <span class="n">details</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
-                    <span class="n">trailing_metadata</span><span class="p">:</span> <span class="n">MetadataType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+                    <span class="n">trailing_metadata</span><span class="p">:</span> <span class="n">Metadata</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
         <span class="sd">&quot;&quot;&quot;Raises an exception to terminate the RPC with a non-OK status.</span>
 
 <span class="sd">        The code and details passed as arguments will supercede any existing</span>
@@ -279,8 +280,7 @@
 <span class="sd">        &quot;&quot;&quot;</span></div>
 
 <div class="viewcode-block" id="ServicerContext.set_trailing_metadata"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.ServicerContext.set_trailing_metadata">[docs]</a>    <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
-    <span class="k">async</span> <span class="k">def</span> <span class="nf">set_trailing_metadata</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
-                                    <span class="n">trailing_metadata</span><span class="p">:</span> <span class="n">MetadataType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+    <span class="k">async</span> <span class="k">def</span> <span class="nf">set_trailing_metadata</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">trailing_metadata</span><span class="p">:</span> <span class="n">Metadata</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
         <span class="sd">&quot;&quot;&quot;Sends the trailing metadata for the RPC.</span>
 
 <span class="sd">        This method need not be called by implementations if they have no</span>
@@ -291,7 +291,7 @@
 <span class="sd">        &quot;&quot;&quot;</span></div>
 
 <div class="viewcode-block" id="ServicerContext.invocation_metadata"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.ServicerContext.invocation_metadata">[docs]</a>    <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
-    <span class="k">def</span> <span class="nf">invocation_metadata</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Optional</span><span class="p">[</span><span class="n">MetadataType</span><span class="p">]:</span>
+    <span class="k">def</span> <span class="nf">invocation_metadata</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Metadata</span><span class="p">]:</span>
         <span class="sd">&quot;&quot;&quot;Accesses the metadata from the sent by the client.</span>
 
 <span class="sd">        Returns:</span>
@@ -340,6 +340,47 @@
 
 <span class="sd">        This method will override any compression configuration set during</span>
 <span class="sd">        server creation or set on the call.</span>
+<span class="sd">        &quot;&quot;&quot;</span></div>
+
+<div class="viewcode-block" id="ServicerContext.peer"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.ServicerContext.peer">[docs]</a>    <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
+    <span class="k">def</span> <span class="nf">peer</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+        <span class="sd">&quot;&quot;&quot;Identifies the peer that invoked the RPC being serviced.</span>
+
+<span class="sd">        Returns:</span>
+<span class="sd">          A string identifying the peer that invoked the RPC being serviced.</span>
+<span class="sd">          The string format is determined by gRPC runtime.</span>
+<span class="sd">        &quot;&quot;&quot;</span></div>
+
+<div class="viewcode-block" id="ServicerContext.peer_identities"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.ServicerContext.peer_identities">[docs]</a>    <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
+    <span class="k">def</span> <span class="nf">peer_identities</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Iterable</span><span class="p">[</span><span class="nb">bytes</span><span class="p">]]:</span>
+        <span class="sd">&quot;&quot;&quot;Gets one or more peer identity(s).</span>
+
+<span class="sd">        Equivalent to</span>
+<span class="sd">        servicer_context.auth_context().get(servicer_context.peer_identity_key())</span>
+
+<span class="sd">        Returns:</span>
+<span class="sd">          An iterable of the identities, or None if the call is not</span>
+<span class="sd">          authenticated. Each identity is returned as a raw bytes type.</span>
+<span class="sd">        &quot;&quot;&quot;</span></div>
+
+<div class="viewcode-block" id="ServicerContext.peer_identity_key"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.ServicerContext.peer_identity_key">[docs]</a>    <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
+    <span class="k">def</span> <span class="nf">peer_identity_key</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+        <span class="sd">&quot;&quot;&quot;The auth property used to identify the peer.</span>
+
+<span class="sd">        For example, &quot;x509_common_name&quot; or &quot;x509_subject_alternative_name&quot; are</span>
+<span class="sd">        used to identify an SSL peer.</span>
+
+<span class="sd">        Returns:</span>
+<span class="sd">          The auth property (string) that indicates the</span>
+<span class="sd">          peer identity, or None if the call is not authenticated.</span>
+<span class="sd">        &quot;&quot;&quot;</span></div>
+
+<div class="viewcode-block" id="ServicerContext.auth_context"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.ServicerContext.auth_context">[docs]</a>    <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
+    <span class="k">def</span> <span class="nf">auth_context</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Mapping</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Iterable</span><span class="p">[</span><span class="nb">bytes</span><span class="p">]]:</span>
+        <span class="sd">&quot;&quot;&quot;Gets the auth context for the call.</span>
+
+<span class="sd">        Returns:</span>
+<span class="sd">          A map of strings to an iterable of bytes for each auth property.</span>
 <span class="sd">        &quot;&quot;&quot;</span></div></div>
 </pre></div>
 
@@ -350,7 +391,7 @@
     <div class="clearer"></div>
   </div>
     <div class="footer">
-      &copy;2018, The gRPC Authors.
+      &copy;2020, The gRPC Authors.
       
     </div>
 

+ 39 - 37
python/_modules/grpc/experimental/aio/_call.html

@@ -4,7 +4,8 @@
 <html lang="en">
   <head>
     <meta charset="utf-8" />
-    <title>grpc.experimental.aio._call &#8212; gRPC Python 1.29.0 documentation</title>
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>grpc.experimental.aio._call &#8212; 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>
 
 
 
@@ -114,9 +115,10 @@
 <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">._typing</span> <span class="kn">import</span> <span class="p">(</span><span class="n">DeserializingFunction</span><span class="p">,</span> <span class="n">DoneCallbackType</span><span class="p">,</span> <span class="n">MetadataType</span><span class="p">,</span>
-                      <span class="n">MetadatumType</span><span class="p">,</span> <span class="n">RequestIterableType</span><span class="p">,</span> <span class="n">RequestType</span><span class="p">,</span>
-                      <span class="n">ResponseType</span><span class="p">,</span> <span class="n">SerializingFunction</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="kn">from</span> <span class="nn">._typing</span> <span class="kn">import</span> <span class="p">(</span><span class="n">DeserializingFunction</span><span class="p">,</span> <span class="n">DoneCallbackType</span><span class="p">,</span> <span class="n">MetadatumType</span><span class="p">,</span>
+                      <span class="n">RequestIterableType</span><span class="p">,</span> <span class="n">RequestType</span><span class="p">,</span> <span class="n">ResponseType</span><span class="p">,</span>
+                      <span class="n">SerializingFunction</span><span class="p">)</span>
 
 <span class="n">__all__</span> <span class="o">=</span> <span class="s1">&#39;AioRpcError&#39;</span><span class="p">,</span> <span class="s1">&#39;Call&#39;</span><span class="p">,</span> <span class="s1">&#39;UnaryUnaryCall&#39;</span><span class="p">,</span> <span class="s1">&#39;UnaryStreamCall&#39;</span>
 
@@ -124,6 +126,7 @@
 <span class="n">_GC_CANCELLATION_DETAILS</span> <span class="o">=</span> <span class="s1">&#39;Cancelled upon garbage collection!&#39;</span>
 <span class="n">_RPC_ALREADY_FINISHED_DETAILS</span> <span class="o">=</span> <span class="s1">&#39;RPC already finished.&#39;</span>
 <span class="n">_RPC_HALF_CLOSED_DETAILS</span> <span class="o">=</span> <span class="s1">&#39;RPC is half closed after calling &quot;done_writing&quot;.&#39;</span>
+<span class="n">_API_STYLE_ERROR</span> <span class="o">=</span> <span class="s1">&#39;The iterator and read/write APIs may not be mixed on a single RPC.&#39;</span>
 
 <span class="n">_OK_CALL_REPRESENTATION</span> <span class="o">=</span> <span class="p">(</span><span class="s1">&#39;&lt;</span><span class="si">{}</span><span class="s1"> of RPC that terminated with:</span><span class="se">\n</span><span class="s1">&#39;</span>
                            <span class="s1">&#39;</span><span class="se">\t</span><span class="s1">status = </span><span class="si">{}</span><span class="se">\n</span><span class="s1">&#39;</span>
@@ -146,22 +149,17 @@
 <span class="sd">    determined. Hence, its methods no longer needs to be coroutines.</span>
 <span class="sd">    &quot;&quot;&quot;</span>
 
-    <span class="c1"># TODO(https://github.com/grpc/grpc/issues/20144) Metadata</span>
-    <span class="c1"># type returned by `initial_metadata` and `trailing_metadata`</span>
-    <span class="c1"># and also taken in the constructor needs to be revisit and make</span>
-    <span class="c1"># it more specific.</span>
-
     <span class="n">_code</span><span class="p">:</span> <span class="n">grpc</span><span class="o">.</span><span class="n">StatusCode</span>
     <span class="n">_details</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span>
-    <span class="n">_initial_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">_trailing_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">_initial_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">_trailing_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">_debug_error_string</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</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">code</span><span class="p">:</span> <span class="n">grpc</span><span class="o">.</span><span class="n">StatusCode</span><span class="p">,</span>
+                 <span class="n">initial_metadata</span><span class="p">:</span> <span class="n">Metadata</span><span class="p">,</span>
+                 <span class="n">trailing_metadata</span><span class="p">:</span> <span class="n">Metadata</span><span class="p">,</span>
                  <span class="n">details</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-                 <span class="n">initial_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="o">=</span> <span class="kc">None</span><span class="p">,</span>
-                 <span class="n">trailing_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="o">=</span> <span class="kc">None</span><span class="p">,</span>
                  <span class="n">debug_error_string</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
         <span class="sd">&quot;&quot;&quot;Constructor.</span>
 
@@ -196,7 +194,7 @@
 <span class="sd">        &quot;&quot;&quot;</span>
         <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_details</span></div>
 
-<div class="viewcode-block" id="AioRpcError.initial_metadata"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.AioRpcError.initial_metadata">[docs]</a>    <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">-&gt;</span> <span class="n">Optional</span><span class="p">[</span><span class="n">MetadataType</span><span class="p">]:</span>
+<div class="viewcode-block" id="AioRpcError.initial_metadata"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.AioRpcError.initial_metadata">[docs]</a>    <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">-&gt;</span> <span class="n">Metadata</span><span class="p">:</span>
         <span class="sd">&quot;&quot;&quot;Accesses the initial metadata sent by the server.</span>
 
 <span class="sd">        Returns:</span>
@@ -204,7 +202,7 @@
 <span class="sd">        &quot;&quot;&quot;</span>
         <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_initial_metadata</span></div>
 
-<div class="viewcode-block" id="AioRpcError.trailing_metadata"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.AioRpcError.trailing_metadata">[docs]</a>    <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">-&gt;</span> <span class="n">Optional</span><span class="p">[</span><span class="n">MetadataType</span><span class="p">]:</span>
+<div class="viewcode-block" id="AioRpcError.trailing_metadata"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.AioRpcError.trailing_metadata">[docs]</a>    <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">-&gt;</span> <span class="n">Metadata</span><span class="p">:</span>
         <span class="sd">&quot;&quot;&quot;Accesses the trailing metadata sent by the server.</span>
 
 <span class="sd">        Returns:</span>
@@ -233,14 +231,14 @@
         <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_repr</span><span class="p">()</span></div>
 
 
-<span class="k">def</span> <span class="nf">_create_rpc_error</span><span class="p">(</span><span class="n">initial_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="k">def</span> <span class="nf">_create_rpc_error</span><span class="p">(</span><span class="n">initial_metadata</span><span class="p">:</span> <span class="n">Metadata</span><span class="p">,</span>
                       <span class="n">status</span><span class="p">:</span> <span class="n">cygrpc</span><span class="o">.</span><span class="n">AioRpcStatus</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">AioRpcError</span><span class="p">:</span>
     <span class="k">return</span> <span class="n">AioRpcError</span><span class="p">(</span>
         <span class="n">_common</span><span class="o">.</span><span class="n">CYGRPC_STATUS_CODE_TO_STATUS_CODE</span><span class="p">[</span><span class="n">status</span><span class="o">.</span><span class="n">code</span><span class="p">()],</span>
-        <span class="n">status</span><span class="o">.</span><span class="n">details</span><span class="p">(),</span>
-        <span class="n">initial_metadata</span><span class="p">,</span>
-        <span class="n">status</span><span class="o">.</span><span class="n">trailing_metadata</span><span class="p">(),</span>
-        <span class="n">status</span><span class="o">.</span><span class="n">debug_error_string</span><span class="p">(),</span>
+        <span class="n">Metadata</span><span class="o">.</span><span class="n">from_tuple</span><span class="p">(</span><span class="n">initial_metadata</span><span class="p">),</span>
+        <span class="n">Metadata</span><span class="o">.</span><span class="n">from_tuple</span><span class="p">(</span><span class="n">status</span><span class="o">.</span><span class="n">trailing_metadata</span><span class="p">()),</span>
+        <span class="n">details</span><span class="o">=</span><span class="n">status</span><span class="o">.</span><span class="n">details</span><span class="p">(),</span>
+        <span class="n">debug_error_string</span><span class="o">=</span><span class="n">status</span><span class="o">.</span><span class="n">debug_error_string</span><span class="p">(),</span>
     <span class="p">)</span>
 
 
@@ -256,7 +254,7 @@
     <span class="n">_request_serializer</span><span class="p">:</span> <span class="n">SerializingFunction</span>
     <span class="n">_response_deserializer</span><span class="p">:</span> <span class="n">DeserializingFunction</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">cython_call</span><span class="p">:</span> <span class="n">cygrpc</span><span class="o">.</span><span class="n">_AioCall</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="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cython_call</span><span class="p">:</span> <span class="n">cygrpc</span><span class="o">.</span><span class="n">_AioCall</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">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">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
@@ -296,11 +294,14 @@
     <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">-&gt;</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">_cython_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">-&gt;</span> <span class="n">MetadataType</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">_cython_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">initial_metadata</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Metadata</span><span class="p">:</span>
+        <span class="n">raw_metadata_tuple</span> <span class="o">=</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cython_call</span><span class="o">.</span><span class="n">initial_metadata</span><span class="p">()</span>
+        <span class="k">return</span> <span class="n">Metadata</span><span class="o">.</span><span class="n">from_tuple</span><span class="p">(</span><span class="n">raw_metadata_tuple</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">-&gt;</span> <span class="n">MetadataType</span><span class="p">:</span>
-        <span class="k">return</span> <span class="p">(</span><span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cython_call</span><span class="o">.</span><span class="n">status</span><span class="p">())</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">trailing_metadata</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Metadata</span><span class="p">:</span>
+        <span class="n">raw_metadata_tuple</span> <span class="o">=</span> <span class="p">(</span><span class="k">await</span>
+                              <span class="bp">self</span><span class="o">.</span><span class="n">_cython_call</span><span class="o">.</span><span class="n">status</span><span class="p">())</span><span class="o">.</span><span class="n">trailing_metadata</span><span class="p">()</span>
+        <span class="k">return</span> <span class="n">Metadata</span><span class="o">.</span><span class="n">from_tuple</span><span class="p">(</span><span class="n">raw_metadata_tuple</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">-&gt;</span> <span class="n">grpc</span><span class="o">.</span><span class="n">StatusCode</span><span class="p">:</span>
         <span class="n">cygrpc_code</span> <span class="o">=</span> <span class="p">(</span><span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cython_call</span><span class="o">.</span><span class="n">status</span><span class="p">())</span><span class="o">.</span><span class="n">code</span><span class="p">()</span>
@@ -391,8 +392,7 @@
         <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_response_style</span> <span class="ow">is</span> <span class="n">_APIStyle</span><span class="o">.</span><span class="n">UNKNOWN</span><span class="p">:</span>
             <span class="bp">self</span><span class="o">.</span><span class="n">_response_style</span> <span class="o">=</span> <span class="n">style</span>
         <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_response_style</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">style</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="s1">&#39;Please don</span><span class="se">\&#39;</span><span class="s1">t mix two styles of API for streaming responses&#39;</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">def</span> <span class="nf">cancel</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
         <span class="k">if</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">cancel</span><span class="p">():</span>
@@ -407,6 +407,9 @@
             <span class="k">yield</span> <span class="n">message</span>
             <span class="n">message</span> <span class="o">=</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">_read</span><span class="p">()</span>
 
+        <span class="c1"># If the read operation failed, Core should explain why.</span>
+        <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">_raise_for_status</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="o">-&gt;</span> <span class="n">AsyncIterable</span><span class="p">[</span><span class="n">ResponseType</span><span class="p">]:</span>
         <span class="bp">self</span><span class="o">.</span><span class="n">_update_response_style</span><span class="p">(</span><span class="n">_APIStyle</span><span class="o">.</span><span class="n">ASYNC_GENERATOR</span><span class="p">)</span>
         <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_message_aiter</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
@@ -467,8 +470,7 @@
 
     <span class="k">def</span> <span class="nf">_raise_for_different_style</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">style</span><span class="p">:</span> <span class="n">_APIStyle</span><span class="p">):</span>
         <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_request_style</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">style</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="s1">&#39;Please don</span><span class="se">\&#39;</span><span class="s1">t mix two styles of API for streaming requests&#39;</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">def</span> <span class="nf">cancel</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
         <span class="k">if</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">cancel</span><span class="p">():</span>
@@ -485,7 +487,8 @@
                                         <span class="n">request_iterator</span><span class="p">:</span> <span class="n">RequestIterableType</span>
                                        <span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
         <span class="k">try</span><span class="p">:</span>
-            <span class="k">if</span> <span class="n">inspect</span><span class="o">.</span><span class="n">isasyncgen</span><span class="p">(</span><span class="n">request_iterator</span><span class="p">):</span>
+            <span class="k">if</span> <span class="n">inspect</span><span class="o">.</span><span class="n">isasyncgen</span><span class="p">(</span><span class="n">request_iterator</span><span class="p">)</span> <span class="ow">or</span> <span class="nb">hasattr</span><span class="p">(</span>
+                    <span class="n">request_iterator</span><span class="p">,</span> <span class="s1">&#39;__aiter__&#39;</span><span class="p">):</span>
                 <span class="k">async</span> <span class="k">for</span> <span class="n">request</span> <span class="ow">in</span> <span class="n">request_iterator</span><span class="p">:</span>
                     <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">_write</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
             <span class="k">else</span><span class="p">:</span>
@@ -512,7 +515,6 @@
 
         <span class="n">serialized_request</span> <span class="o">=</span> <span class="n">_common</span><span class="o">.</span><span class="n">serialize</span><span class="p">(</span><span class="n">request</span><span class="p">,</span>
                                                <span class="bp">self</span><span class="o">.</span><span class="n">_request_serializer</span><span class="p">)</span>
-
         <span class="k">try</span><span class="p">:</span>
             <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cython_call</span><span class="o">.</span><span class="n">send_serialized_message</span><span class="p">(</span><span class="n">serialized_request</span><span class="p">)</span>
         <span class="k">except</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">CancelledError</span><span class="p">:</span>
@@ -562,7 +564,7 @@
 
     <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">request</span><span class="p">:</span> <span class="n">RequestType</span><span class="p">,</span> <span class="n">deadline</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">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>
@@ -611,7 +613,7 @@
 
     <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">request</span><span class="p">:</span> <span class="n">RequestType</span><span class="p">,</span> <span class="n">deadline</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">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>
@@ -651,7 +653,7 @@
 
     <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">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">deadline</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">deadline</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>
@@ -689,7 +691,7 @@
 
     <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">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">deadline</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">deadline</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>
@@ -724,7 +726,7 @@
     <div class="clearer"></div>
   </div>
     <div class="footer">
-      &copy;2018, The gRPC Authors.
+      &copy;2020, The gRPC Authors.
       
     </div>
 

+ 113 - 67
python/_modules/grpc/experimental/aio/_channel.html

@@ -4,7 +4,8 @@
 <html lang="en">
   <head>
     <meta charset="utf-8" />
-    <title>grpc.experimental.aio._channel &#8212; gRPC Python 1.29.0 documentation</title>
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>grpc.experimental.aio._channel &#8212; 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>
 
 
 
@@ -104,7 +105,7 @@
 
 <span class="kn">import</span> <span class="nn">asyncio</span>
 <span class="kn">import</span> <span class="nn">sys</span>
-<span class="kn">from</span> <span class="nn">typing</span> <span class="kn">import</span> <span class="n">Any</span><span class="p">,</span> <span class="n">Iterable</span><span class="p">,</span> <span class="n">Optional</span><span class="p">,</span> <span class="n">Sequence</span>
+<span class="kn">from</span> <span class="nn">typing</span> <span class="kn">import</span> <span class="n">Any</span><span class="p">,</span> <span class="n">Iterable</span><span class="p">,</span> <span class="n">Optional</span><span class="p">,</span> <span class="n">Sequence</span><span class="p">,</span> <span class="n">List</span>
 
 <span class="kn">import</span> <span class="nn">grpc</span>
 <span class="kn">from</span> <span class="nn">grpc</span> <span class="kn">import</span> <span class="n">_common</span><span class="p">,</span> <span class="n">_compression</span><span class="p">,</span> <span class="n">_grpcio_metadata</span>
@@ -113,13 +114,16 @@
 <span class="kn">from</span> <span class="nn">.</span> <span class="kn">import</span> <span class="n">_base_call</span><span class="p">,</span> <span class="n">_base_channel</span>
 <span class="kn">from</span> <span class="nn">._call</span> <span class="kn">import</span> <span class="p">(</span><span class="n">StreamStreamCall</span><span class="p">,</span> <span class="n">StreamUnaryCall</span><span class="p">,</span> <span class="n">UnaryStreamCall</span><span class="p">,</span>
                     <span class="n">UnaryUnaryCall</span><span class="p">)</span>
-<span class="kn">from</span> <span class="nn">._interceptor</span> <span class="kn">import</span> <span class="p">(</span><span class="n">InterceptedUnaryUnaryCall</span><span class="p">,</span>
-                           <span class="n">UnaryUnaryClientInterceptor</span><span class="p">)</span>
-<span class="kn">from</span> <span class="nn">._typing</span> <span class="kn">import</span> <span class="p">(</span><span class="n">ChannelArgumentType</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="kn">from</span> <span class="nn">._interceptor</span> <span class="kn">import</span> <span class="p">(</span>
+    <span class="n">InterceptedUnaryUnaryCall</span><span class="p">,</span> <span class="n">InterceptedUnaryStreamCall</span><span class="p">,</span>
+    <span class="n">InterceptedStreamUnaryCall</span><span class="p">,</span> <span class="n">InterceptedStreamStreamCall</span><span class="p">,</span> <span class="n">ClientInterceptor</span><span class="p">,</span>
+    <span class="n">UnaryUnaryClientInterceptor</span><span class="p">,</span> <span class="n">UnaryStreamClientInterceptor</span><span class="p">,</span>
+    <span class="n">StreamUnaryClientInterceptor</span><span class="p">,</span> <span class="n">StreamStreamClientInterceptor</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="kn">from</span> <span class="nn">._typing</span> <span class="kn">import</span> <span class="p">(</span><span class="n">ChannelArgumentType</span><span class="p">,</span> <span class="n">DeserializingFunction</span><span class="p">,</span>
                       <span class="n">SerializingFunction</span><span class="p">,</span> <span class="n">RequestIterableType</span><span class="p">)</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="n">_IMMUTABLE_EMPTY_TUPLE</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">()</span>
 <span class="n">_USER_AGENT</span> <span class="o">=</span> <span class="s1">&#39;grpc-python-asyncio/</span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">_grpcio_metadata</span><span class="o">.</span><span class="n">__version__</span><span class="p">)</span>
 
 <span class="k">if</span> <span class="n">sys</span><span class="o">.</span><span class="n">version_info</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">&lt;</span> <span class="mi">7</span><span class="p">:</span>
@@ -154,7 +158,7 @@
     <span class="n">_method</span><span class="p">:</span> <span class="nb">bytes</span>
     <span class="n">_request_serializer</span><span class="p">:</span> <span class="n">SerializingFunction</span>
     <span class="n">_response_deserializer</span><span class="p">:</span> <span class="n">DeserializingFunction</span>
-    <span class="n">_interceptors</span><span class="p">:</span> <span class="n">Optional</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">_interceptors</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Sequence</span><span class="p">[</span><span class="n">ClientInterceptor</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="c1"># pylint: disable=too-many-arguments</span>
@@ -164,7 +168,7 @@
             <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">interceptors</span><span class="p">:</span> <span class="n">Optional</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">interceptors</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Sequence</span><span class="p">[</span><span class="n">ClientInterceptor</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="p">)</span> <span class="o">-&gt;</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>
@@ -174,6 +178,19 @@
         <span class="bp">self</span><span class="o">.</span><span class="n">_response_deserializer</span> <span class="o">=</span> <span class="n">response_deserializer</span>
         <span class="bp">self</span><span class="o">.</span><span class="n">_interceptors</span> <span class="o">=</span> <span class="n">interceptors</span>
 
+    <span class="nd">@staticmethod</span>
+    <span class="k">def</span> <span class="nf">_init_metadata</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="o">=</span> <span class="kc">None</span><span class="p">,</span>
+                       <span class="n">compression</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">Compression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+                      <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Metadata</span><span class="p">:</span>
+        <span class="sd">&quot;&quot;&quot;Based on the provided values for &lt;metadata&gt; or &lt;compression&gt; initialise the final</span>
+<span class="sd">        metadata, as it should be used for the current call.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">metadata</span> <span class="o">=</span> <span class="n">metadata</span> <span class="ow">or</span> <span class="n">Metadata</span><span class="p">()</span>
+        <span class="k">if</span> <span class="n">compression</span><span class="p">:</span>
+            <span class="n">metadata</span> <span class="o">=</span> <span class="n">Metadata</span><span class="p">(</span>
+                <span class="o">*</span><span class="n">_compression</span><span class="o">.</span><span class="n">augment_metadata</span><span class="p">(</span><span class="n">metadata</span><span class="p">,</span> <span class="n">compression</span><span class="p">))</span>
+        <span class="k">return</span> <span class="n">metadata</span>
+
 
 <span class="k">class</span> <span class="nc">UnaryUnaryMultiCallable</span><span class="p">(</span><span class="n">_BaseMultiCallable</span><span class="p">,</span>
                               <span class="n">_base_channel</span><span class="o">.</span><span class="n">UnaryUnaryMultiCallable</span><span class="p">):</span>
@@ -182,14 +199,13 @@
                  <span class="n">request</span><span class="p">:</span> <span class="n">Any</span><span class="p">,</span>
                  <span class="o">*</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="o">=</span> <span class="kc">None</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="o">=</span> <span class="n">_IMMUTABLE_EMPTY_TUPLE</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="o">=</span> <span class="kc">None</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="o">=</span> <span class="kc">None</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="o">=</span> <span class="kc">None</span><span class="p">,</span>
                  <span class="n">compression</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">Compression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
                 <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">_base_call</span><span class="o">.</span><span class="n">UnaryUnaryCall</span><span class="p">:</span>
-        <span class="k">if</span> <span class="n">compression</span><span class="p">:</span>
-            <span class="n">metadata</span> <span class="o">=</span> <span class="n">_compression</span><span class="o">.</span><span class="n">augment_metadata</span><span class="p">(</span><span class="n">metadata</span><span class="p">,</span> <span class="n">compression</span><span class="p">)</span>
 
+        <span class="n">metadata</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_init_metadata</span><span class="p">(</span><span class="n">metadata</span><span class="p">,</span> <span class="n">compression</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</span><span class="p">:</span>
             <span class="n">call</span> <span class="o">=</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">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>
@@ -213,20 +229,26 @@
                  <span class="n">request</span><span class="p">:</span> <span class="n">Any</span><span class="p">,</span>
                  <span class="o">*</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="o">=</span> <span class="kc">None</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="o">=</span> <span class="n">_IMMUTABLE_EMPTY_TUPLE</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="o">=</span> <span class="kc">None</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="o">=</span> <span class="kc">None</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="o">=</span> <span class="kc">None</span><span class="p">,</span>
                  <span class="n">compression</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">Compression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
                 <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">_base_call</span><span class="o">.</span><span class="n">UnaryStreamCall</span><span class="p">:</span>
-        <span class="k">if</span> <span class="n">compression</span><span class="p">:</span>
-            <span class="n">metadata</span> <span class="o">=</span> <span class="n">_compression</span><span class="o">.</span><span class="n">augment_metadata</span><span class="p">(</span><span class="n">metadata</span><span class="p">,</span> <span class="n">compression</span><span class="p">)</span>
 
+        <span class="n">metadata</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_init_metadata</span><span class="p">(</span><span class="n">metadata</span><span class="p">,</span> <span class="n">compression</span><span class="p">)</span>
         <span class="n">deadline</span> <span class="o">=</span> <span class="n">_timeout_to_deadline</span><span class="p">(</span><span class="n">timeout</span><span class="p">)</span>
 
-        <span class="n">call</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">deadline</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="bp">self</span><span class="o">.</span><span class="n">_channel</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_method</span><span class="p">,</span>
-                               <span class="bp">self</span><span class="o">.</span><span class="n">_request_serializer</span><span class="p">,</span>
-                               <span class="bp">self</span><span class="o">.</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">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_interceptors</span><span class="p">:</span>
+            <span class="n">call</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">deadline</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="bp">self</span><span class="o">.</span><span class="n">_channel</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_method</span><span class="p">,</span>
+                                   <span class="bp">self</span><span class="o">.</span><span class="n">_request_serializer</span><span class="p">,</span>
+                                   <span class="bp">self</span><span class="o">.</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">else</span><span class="p">:</span>
+            <span class="n">call</span> <span class="o">=</span> <span class="n">InterceptedUnaryStreamCall</span><span class="p">(</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">_interceptors</span><span class="p">,</span> <span class="n">request</span><span class="p">,</span> <span class="n">deadline</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="bp">self</span><span class="o">.</span><span class="n">_channel</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_method</span><span class="p">,</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">_request_serializer</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</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="n">call</span>
 
@@ -237,20 +259,26 @@
     <span class="k">def</span> <span class="fm">__call__</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="o">=</span> <span class="kc">None</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="o">=</span> <span class="kc">None</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="o">=</span> <span class="n">_IMMUTABLE_EMPTY_TUPLE</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="o">=</span> <span class="kc">None</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="o">=</span> <span class="kc">None</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="o">=</span> <span class="kc">None</span><span class="p">,</span>
                  <span class="n">compression</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">Compression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
                 <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">_base_call</span><span class="o">.</span><span class="n">StreamUnaryCall</span><span class="p">:</span>
-        <span class="k">if</span> <span class="n">compression</span><span class="p">:</span>
-            <span class="n">metadata</span> <span class="o">=</span> <span class="n">_compression</span><span class="o">.</span><span class="n">augment_metadata</span><span class="p">(</span><span class="n">metadata</span><span class="p">,</span> <span class="n">compression</span><span class="p">)</span>
 
+        <span class="n">metadata</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_init_metadata</span><span class="p">(</span><span class="n">metadata</span><span class="p">,</span> <span class="n">compression</span><span class="p">)</span>
         <span class="n">deadline</span> <span class="o">=</span> <span class="n">_timeout_to_deadline</span><span class="p">(</span><span class="n">timeout</span><span class="p">)</span>
 
-        <span class="n">call</span> <span class="o">=</span> <span class="n">StreamUnaryCall</span><span class="p">(</span><span class="n">request_iterator</span><span class="p">,</span> <span class="n">deadline</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="bp">self</span><span class="o">.</span><span class="n">_channel</span><span class="p">,</span>
-                               <span class="bp">self</span><span class="o">.</span><span class="n">_method</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_request_serializer</span><span class="p">,</span>
-                               <span class="bp">self</span><span class="o">.</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">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_interceptors</span><span class="p">:</span>
+            <span class="n">call</span> <span class="o">=</span> <span class="n">StreamUnaryCall</span><span class="p">(</span><span class="n">request_iterator</span><span class="p">,</span> <span class="n">deadline</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="bp">self</span><span class="o">.</span><span class="n">_channel</span><span class="p">,</span>
+                                   <span class="bp">self</span><span class="o">.</span><span class="n">_method</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_request_serializer</span><span class="p">,</span>
+                                   <span class="bp">self</span><span class="o">.</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">else</span><span class="p">:</span>
+            <span class="n">call</span> <span class="o">=</span> <span class="n">InterceptedStreamUnaryCall</span><span class="p">(</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">_interceptors</span><span class="p">,</span> <span class="n">request_iterator</span><span class="p">,</span> <span class="n">deadline</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="bp">self</span><span class="o">.</span><span class="n">_channel</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_method</span><span class="p">,</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">_request_serializer</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</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="n">call</span>
 
@@ -261,20 +289,26 @@
     <span class="k">def</span> <span class="fm">__call__</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="o">=</span> <span class="kc">None</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="o">=</span> <span class="kc">None</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="o">=</span> <span class="n">_IMMUTABLE_EMPTY_TUPLE</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="o">=</span> <span class="kc">None</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="o">=</span> <span class="kc">None</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="o">=</span> <span class="kc">None</span><span class="p">,</span>
                  <span class="n">compression</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">Compression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
                 <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">_base_call</span><span class="o">.</span><span class="n">StreamStreamCall</span><span class="p">:</span>
-        <span class="k">if</span> <span class="n">compression</span><span class="p">:</span>
-            <span class="n">metadata</span> <span class="o">=</span> <span class="n">_compression</span><span class="o">.</span><span class="n">augment_metadata</span><span class="p">(</span><span class="n">metadata</span><span class="p">,</span> <span class="n">compression</span><span class="p">)</span>
 
+        <span class="n">metadata</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_init_metadata</span><span class="p">(</span><span class="n">metadata</span><span class="p">,</span> <span class="n">compression</span><span class="p">)</span>
         <span class="n">deadline</span> <span class="o">=</span> <span class="n">_timeout_to_deadline</span><span class="p">(</span><span class="n">timeout</span><span class="p">)</span>
 
-        <span class="n">call</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">deadline</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="bp">self</span><span class="o">.</span><span class="n">_channel</span><span class="p">,</span>
-                                <span class="bp">self</span><span class="o">.</span><span class="n">_method</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_request_serializer</span><span class="p">,</span>
-                                <span class="bp">self</span><span class="o">.</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">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_interceptors</span><span class="p">:</span>
+            <span class="n">call</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">deadline</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="bp">self</span><span class="o">.</span><span class="n">_channel</span><span class="p">,</span>
+                                    <span class="bp">self</span><span class="o">.</span><span class="n">_method</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_request_serializer</span><span class="p">,</span>
+                                    <span class="bp">self</span><span class="o">.</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">else</span><span class="p">:</span>
+            <span class="n">call</span> <span class="o">=</span> <span class="n">InterceptedStreamStreamCall</span><span class="p">(</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">_interceptors</span><span class="p">,</span> <span class="n">request_iterator</span><span class="p">,</span> <span class="n">deadline</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="bp">self</span><span class="o">.</span><span class="n">_channel</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_method</span><span class="p">,</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">_request_serializer</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</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="n">call</span>
 
@@ -282,12 +316,15 @@
 <span class="k">class</span> <span class="nc">Channel</span><span class="p">(</span><span class="n">_base_channel</span><span class="o">.</span><span class="n">Channel</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="n">_channel</span><span class="p">:</span> <span class="n">cygrpc</span><span class="o">.</span><span class="n">AioChannel</span>
-    <span class="n">_unary_unary_interceptors</span><span class="p">:</span> <span class="n">Optional</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">_unary_unary_interceptors</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">UnaryUnaryClientInterceptor</span><span class="p">]</span>
+    <span class="n">_unary_stream_interceptors</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">UnaryStreamClientInterceptor</span><span class="p">]</span>
+    <span class="n">_stream_unary_interceptors</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">StreamUnaryClientInterceptor</span><span class="p">]</span>
+    <span class="n">_stream_stream_interceptors</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">StreamStreamClientInterceptor</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">target</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">options</span><span class="p">:</span> <span class="n">ChannelArgumentType</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">ChannelCredentials</span><span class="p">],</span>
                  <span class="n">compression</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">Compression</span><span class="p">],</span>
-                 <span class="n">interceptors</span><span class="p">:</span> <span class="n">Optional</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">interceptors</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Sequence</span><span class="p">[</span><span class="n">ClientInterceptor</span><span class="p">]]):</span>
         <span class="sd">&quot;&quot;&quot;Constructor.</span>
 
 <span class="sd">        Args:</span>
@@ -299,25 +336,30 @@
 <span class="sd">          interceptors: An optional list of interceptors that would be used for</span>
 <span class="sd">            intercepting any RPC executed with that channel.</span>
 <span class="sd">        &quot;&quot;&quot;</span>
-        <span class="k">if</span> <span class="n">interceptors</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">_unary_unary_interceptors</span> <span class="o">=</span> <span class="kc">None</span>
-        <span class="k">else</span><span class="p">:</span>
-            <span class="bp">self</span><span class="o">.</span><span class="n">_unary_unary_interceptors</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span>
-                <span class="nb">filter</span><span class="p">(</span>
-                    <span class="k">lambda</span> <span class="n">interceptor</span><span class="p">:</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">interceptor</span><span class="p">,</span>
-                                                   <span class="n">UnaryUnaryClientInterceptor</span><span class="p">),</span>
-                    <span class="n">interceptors</span><span class="p">))</span>
-
-            <span class="n">invalid_interceptors</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">interceptors</span><span class="p">)</span> <span class="o">-</span> <span class="nb">set</span><span class="p">(</span>
-                <span class="bp">self</span><span class="o">.</span><span class="n">_unary_unary_interceptors</span><span class="p">)</span>
-
-            <span class="k">if</span> <span class="n">invalid_interceptors</span><span class="p">:</span>
-                <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
-                    <span class="s2">&quot;Interceptor must be &quot;</span><span class="o">+</span>\
-                    <span class="s2">&quot;UnaryUnaryClientInterceptors, the following are invalid: </span><span class="si">{}</span><span class="s2">&quot;</span>\
-                    <span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">invalid_interceptors</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">asyncio</span><span class="o">.</span><span class="n">get_event_loop</span><span class="p">()</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_unary_unary_interceptors</span> <span class="o">=</span> <span class="p">[]</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_unary_stream_interceptors</span> <span class="o">=</span> <span class="p">[]</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_stream_unary_interceptors</span> <span class="o">=</span> <span class="p">[]</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_stream_stream_interceptors</span> <span class="o">=</span> <span class="p">[]</span>
+
+        <span class="k">if</span> <span class="n">interceptors</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+            <span class="k">for</span> <span class="n">interceptor</span> <span class="ow">in</span> <span class="n">interceptors</span><span class="p">:</span>
+                <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">interceptor</span><span class="p">,</span> <span class="n">UnaryUnaryClientInterceptor</span><span class="p">):</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">_unary_unary_interceptors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">interceptor</span><span class="p">)</span>
+                <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">interceptor</span><span class="p">,</span> <span class="n">UnaryStreamClientInterceptor</span><span class="p">):</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">_unary_stream_interceptors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">interceptor</span><span class="p">)</span>
+                <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">interceptor</span><span class="p">,</span> <span class="n">StreamUnaryClientInterceptor</span><span class="p">):</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">_stream_unary_interceptors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">interceptor</span><span class="p">)</span>
+                <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">interceptor</span><span class="p">,</span> <span class="n">StreamStreamClientInterceptor</span><span class="p">):</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">_stream_stream_interceptors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">interceptor</span><span class="p">)</span>
+                <span class="k">else</span><span class="p">:</span>
+                    <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
+                        <span class="s2">&quot;Interceptor </span><span class="si">{}</span><span class="s2"> must be &quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">interceptor</span><span class="p">)</span> <span class="o">+</span>
+                        <span class="s2">&quot;</span><span class="si">{}</span><span class="s2"> or &quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">UnaryUnaryClientInterceptor</span><span class="o">.</span><span class="vm">__name__</span><span class="p">)</span> <span class="o">+</span>
+                        <span class="s2">&quot;</span><span class="si">{}</span><span class="s2"> or &quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">UnaryStreamClientInterceptor</span><span class="o">.</span><span class="vm">__name__</span><span class="p">)</span> <span class="o">+</span>
+                        <span class="s2">&quot;</span><span class="si">{}</span><span class="s2"> or &quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">StreamUnaryClientInterceptor</span><span class="o">.</span><span class="vm">__name__</span><span class="p">)</span> <span class="o">+</span>
+                        <span class="s2">&quot;</span><span class="si">{}</span><span class="s2">. &quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">StreamStreamClientInterceptor</span><span class="o">.</span><span class="vm">__name__</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">cygrpc</span><span class="o">.</span><span class="n">get_working_loop</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">cygrpc</span><span class="o">.</span><span class="n">AioChannel</span><span class="p">(</span>
             <span class="n">_common</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="n">target</span><span class="p">),</span>
             <span class="n">_augment_channel_arguments</span><span class="p">(</span><span class="n">options</span><span class="p">,</span> <span class="n">compression</span><span class="p">),</span> <span class="n">credentials</span><span class="p">,</span>
@@ -441,7 +483,9 @@
     <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">UnaryStreamMultiCallable</span><span class="p">:</span>
         <span class="k">return</span> <span class="n">UnaryStreamMultiCallable</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">_common</span><span class="o">.</span><span class="n">encode</span><span class="p">(</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="kc">None</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">response_deserializer</span><span class="p">,</span>
+                                        <span class="bp">self</span><span class="o">.</span><span class="n">_unary_stream_interceptors</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">def</span> <span class="nf">stream_unary</span><span class="p">(</span>
             <span class="bp">self</span><span class="p">,</span>
@@ -451,7 +495,9 @@
     <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">StreamUnaryMultiCallable</span><span class="p">:</span>
         <span class="k">return</span> <span class="n">StreamUnaryMultiCallable</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">_common</span><span class="o">.</span><span class="n">encode</span><span class="p">(</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="kc">None</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">response_deserializer</span><span class="p">,</span>
+                                        <span class="bp">self</span><span class="o">.</span><span class="n">_stream_unary_interceptors</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">def</span> <span class="nf">stream_stream</span><span class="p">(</span>
             <span class="bp">self</span><span class="p">,</span>
@@ -461,7 +507,8 @@
     <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">StreamStreamMultiCallable</span><span class="p">:</span>
         <span class="k">return</span> <span class="n">StreamStreamMultiCallable</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">_common</span><span class="o">.</span><span class="n">encode</span><span class="p">(</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="kc">None</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">_stream_stream_interceptors</span><span class="p">,</span>
                                          <span class="bp">self</span><span class="o">.</span><span class="n">_loop</span><span class="p">)</span>
 
 
@@ -469,12 +516,12 @@
         <span class="n">target</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
         <span class="n">options</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">ChannelArgumentType</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
         <span class="n">compression</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">Compression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-        <span class="n">interceptors</span><span class="p">:</span> <span class="n">Optional</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="o">=</span> <span class="kc">None</span><span class="p">):</span>
+        <span class="n">interceptors</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Sequence</span><span class="p">[</span><span class="n">ClientInterceptor</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">):</span>
     <span class="sd">&quot;&quot;&quot;Creates an insecure asynchronous Channel to a server.</span>
 
 <span class="sd">    Args:</span>
 <span class="sd">      target: The server address</span>
-<span class="sd">      options: An optional list of key-value pairs (channel args</span>
+<span class="sd">      options: An optional list of key-value pairs (:term:`channel_arguments`</span>
 <span class="sd">        in gRPC Core runtime) to configure the channel.</span>
 <span class="sd">      compression: An optional value indicating the compression method to be</span>
 <span class="sd">        used over the lifetime of the channel. This is an EXPERIMENTAL option.</span>
@@ -488,18 +535,17 @@
                    <span class="n">compression</span><span class="p">,</span> <span class="n">interceptors</span><span class="p">)</span></div>
 
 
-<div class="viewcode-block" id="secure_channel"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.secure_channel">[docs]</a><span class="k">def</span> <span class="nf">secure_channel</span><span class="p">(</span>
-        <span class="n">target</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
-        <span class="n">credentials</span><span class="p">:</span> <span class="n">grpc</span><span class="o">.</span><span class="n">ChannelCredentials</span><span class="p">,</span>
-        <span class="n">options</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">ChannelArgumentType</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-        <span class="n">compression</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">Compression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-        <span class="n">interceptors</span><span class="p">:</span> <span class="n">Optional</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="o">=</span> <span class="kc">None</span><span class="p">):</span>
+<div class="viewcode-block" id="secure_channel"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.secure_channel">[docs]</a><span class="k">def</span> <span class="nf">secure_channel</span><span class="p">(</span><span class="n">target</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
+                   <span class="n">credentials</span><span class="p">:</span> <span class="n">grpc</span><span class="o">.</span><span class="n">ChannelCredentials</span><span class="p">,</span>
+                   <span class="n">options</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">ChannelArgumentType</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+                   <span class="n">compression</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">Compression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+                   <span class="n">interceptors</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Sequence</span><span class="p">[</span><span class="n">ClientInterceptor</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">):</span>
     <span class="sd">&quot;&quot;&quot;Creates a secure asynchronous Channel to a server.</span>
 
 <span class="sd">    Args:</span>
 <span class="sd">      target: The server address.</span>
 <span class="sd">      credentials: A ChannelCredentials instance.</span>
-<span class="sd">      options: An optional list of key-value pairs (channel args</span>
+<span class="sd">      options: An optional list of key-value pairs (:term:`channel_arguments`</span>
 <span class="sd">        in gRPC Core runtime) to configure the channel.</span>
 <span class="sd">      compression: An optional value indicating the compression method to be</span>
 <span class="sd">        used over the lifetime of the channel. This is an EXPERIMENTAL option.</span>
@@ -520,7 +566,7 @@
     <div class="clearer"></div>
   </div>
     <div class="footer">
-      &copy;2018, The gRPC Authors.
+      &copy;2020, The gRPC Authors.
       
     </div>
 

+ 714 - 109
python/_modules/grpc/experimental/aio/_interceptor.html

@@ -4,7 +4,8 @@
 <html lang="en">
   <head>
     <meta charset="utf-8" />
-    <title>grpc.experimental.aio._interceptor &#8212; gRPC Python 1.29.0 documentation</title>
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>grpc.experimental.aio._interceptor &#8212; 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">&#39;Locally cancelled by application!&#39;</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">    &quot;&quot;&quot;</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">&quot;&quot;&quot;Base class used for all Aio Client Interceptor classes&quot;&quot;&quot;</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">&quot;&quot;&quot;Affords intercepting unary-unary invocations.&quot;&quot;&quot;</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&#39;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">        &quot;&quot;&quot;</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">&quot;&quot;&quot;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">&quot;&quot;&quot;Affords intercepting unary-stream invocations.&quot;&quot;&quot;</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">-&gt;</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">&quot;&quot;&quot;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&#39;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">        &quot;&quot;&quot;</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">&quot;&quot;&quot;Affords intercepting stream-unary invocations.&quot;&quot;&quot;</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">-&gt;</span> <span class="n">StreamUnaryCall</span><span class="p">:</span>
+        <span class="sd">&quot;&quot;&quot;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&#39;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">        &quot;&quot;&quot;</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">&quot;&quot;&quot;Affords intercepting stream-stream invocations.&quot;&quot;&quot;</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">-&gt;</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">&quot;&quot;&quot;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&#39;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">        &quot;&quot;&quot;</span>
+
+
+<span class="k">class</span> <span class="nc">InterceptedCall</span><span class="p">:</span>
+    <span class="sd">&quot;&quot;&quot;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">    &quot;&quot;&quot;</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">-&gt;</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">-&gt;</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">-&gt;</span> <span class="n">UnaryUnaryCall</span><span class="p">:</span>
-        <span class="sd">&quot;&quot;&quot;Run the RPC call wrapped in interceptors&quot;&quot;&quot;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+        <span class="sd">&quot;&quot;&quot;Signal peer that client is done writing.</span>
+
+<span class="sd">        This method is idempotent.</span>
+<span class="sd">        &quot;&quot;&quot;</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">&quot;&quot;&quot;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">    &quot;&quot;&quot;</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">-&gt;</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">-&gt;</span> <span class="n">UnaryUnaryCall</span><span class="p">:</span>
+        <span class="sd">&quot;&quot;&quot;Run the RPC call wrapped in interceptors&quot;&quot;&quot;</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">-&gt;</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">-&gt;</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">&quot;&quot;&quot;Used for running a `UnaryStreamCall` wrapped by interceptors.&quot;&quot;&quot;</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">-&gt;</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">-&gt;</span> <span class="n">UnaryStreamCall</span><span class="p">:</span>
+        <span class="sd">&quot;&quot;&quot;Run the RPC call wrapped in interceptors&quot;&quot;&quot;</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">-&gt;</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">-&gt;</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">&quot;&quot;&quot;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">    &quot;&quot;&quot;</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">-&gt;</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">-&gt;</span> <span class="n">StreamUnaryCall</span><span class="p">:</span>
+        <span class="sd">&quot;&quot;&quot;Run the RPC call wrapped in interceptors&quot;&quot;&quot;</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">-&gt;</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">-&gt;</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">&quot;&quot;&quot;Used for running a `StreamStreamCall` wrapped by interceptors.&quot;&quot;&quot;</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">-&gt;</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">-&gt;</span> <span class="n">StreamStreamCall</span><span class="p">:</span>
+        <span class="sd">&quot;&quot;&quot;Run the RPC call wrapped in interceptors&quot;&quot;&quot;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">&quot;&quot;&quot;UnaryStreamCall class wich uses an alternative response iterator.&quot;&quot;&quot;</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">-&gt;</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">&quot;&quot;&quot;StreamStreamCall class wich uses an alternative response iterator.&quot;&quot;&quot;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">
-      &copy;2018, The gRPC Authors.
+      &copy;2020, The gRPC Authors.
       
     </div>
 

+ 11 - 10
python/_modules/grpc/experimental/aio/_server.html

@@ -4,7 +4,8 @@
 <html lang="en">
   <head>
     <meta charset="utf-8" />
-    <title>grpc.experimental.aio._server &#8212; gRPC Python 1.29.0 documentation</title>
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>grpc.experimental.aio._server &#8212; 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>
 
 
 
@@ -102,7 +103,6 @@
 <span class="c1"># limitations under the License.</span>
 <span class="sd">&quot;&quot;&quot;Server-side implementation of gRPC Asyncio Python.&quot;&quot;&quot;</span>
 
-<span class="kn">import</span> <span class="nn">asyncio</span>
 <span class="kn">from</span> <span class="nn">concurrent.futures</span> <span class="kn">import</span> <span class="n">Executor</span>
 <span class="kn">from</span> <span class="nn">typing</span> <span class="kn">import</span> <span class="n">Any</span><span class="p">,</span> <span class="n">Optional</span><span class="p">,</span> <span class="n">Sequence</span>
 
@@ -130,7 +130,7 @@
                  <span class="n">options</span><span class="p">:</span> <span class="n">ChannelArgumentType</span><span class="p">,</span>
                  <span class="n">maximum_concurrent_rpcs</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">int</span><span class="p">],</span>
                  <span class="n">compression</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">Compression</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">asyncio</span><span class="o">.</span><span class="n">get_event_loop</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">cygrpc</span><span class="o">.</span><span class="n">get_working_loop</span><span class="p">()</span>
         <span class="k">if</span> <span class="n">interceptors</span><span class="p">:</span>
             <span class="n">invalid_interceptors</span> <span class="o">=</span> <span class="p">[</span>
                 <span class="n">interceptor</span> <span class="k">for</span> <span class="n">interceptor</span> <span class="ow">in</span> <span class="n">interceptors</span>
@@ -252,10 +252,11 @@
 <span class="sd">        be safe to slightly extend the underlying Cython object&#39;s life span.</span>
 <span class="sd">        &quot;&quot;&quot;</span>
         <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s1">&#39;_server&#39;</span><span class="p">):</span>
-            <span class="n">cygrpc</span><span class="o">.</span><span class="n">schedule_coro_threadsafe</span><span class="p">(</span>
-                <span class="bp">self</span><span class="o">.</span><span class="n">_server</span><span class="o">.</span><span class="n">shutdown</span><span class="p">(</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="p">,</span>
-            <span class="p">)</span>
+            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_server</span><span class="o">.</span><span class="n">is_running</span><span class="p">():</span>
+                <span class="n">cygrpc</span><span class="o">.</span><span class="n">schedule_coro_threadsafe</span><span class="p">(</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">_server</span><span class="o">.</span><span class="n">shutdown</span><span class="p">(</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="p">,</span>
+                <span class="p">)</span>
 
 
 <div class="viewcode-block" id="server"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.server">[docs]</a><span class="k">def</span> <span class="nf">server</span><span class="p">(</span><span class="n">migration_thread_pool</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Executor</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
@@ -276,7 +277,7 @@
 <span class="sd">        and optionally manipulate the incoming RPCs before handing them over to</span>
 <span class="sd">        handlers. The interceptors are given control in the order they are</span>
 <span class="sd">        specified. This is an EXPERIMENTAL API.</span>
-<span class="sd">      options: An optional list of key-value pairs (channel args in gRPC runtime)</span>
+<span class="sd">      options: An optional list of key-value pairs (:term:`channel_arguments` in gRPC runtime)</span>
 <span class="sd">        to configure the channel.</span>
 <span class="sd">      maximum_concurrent_rpcs: The maximum number of concurrent RPCs this server</span>
 <span class="sd">        will service before returning RESOURCE_EXHAUSTED status, or None to</span>
@@ -302,7 +303,7 @@
     <div class="clearer"></div>
   </div>
     <div class="footer">
-      &copy;2018, The gRPC Authors.
+      &copy;2020, The gRPC Authors.
       
     </div>
 

+ 242 - 0
python/_modules/grpc_channelz/v1/_servicer.html

@@ -0,0 +1,242 @@
+
+<!DOCTYPE html>
+
+<html lang="en">
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>grpc_channelz.v1._servicer &#8212; 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>
+    <script src="../../../_static/jquery.js"></script>
+    <script src="../../../_static/underscore.js"></script>
+    <script src="../../../_static/doctools.js"></script>
+    <script src="../../../_static/language_data.js"></script>
+    <link rel="index" title="Index" href="../../../genindex.html" />
+    <link rel="search" title="Search" href="../../../search.html" />
+   
+  <link rel="stylesheet" href="../../../_static/custom.css" type="text/css" />
+  
+  
+  <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
+
+  </head><body>
+  <div class="document">
+    
+      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
+        <div class="sphinxsidebarwrapper">
+<h1 class="logo"><a href="../../../index.html">gRPC Python</a></h1>
+
+
+
+<p class="blurb">1.31.0</p>
+
+
+
+
+
+
+<h3>Navigation</h3>
+<p class="caption"><span class="caption-text">Contents:</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="../../../grpc.html">gRPC</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../grpc_asyncio.html">gRPC AsyncIO API</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../grpc_channelz.html">gRPC Channelz</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../grpc_health_checking.html">gRPC Health Checking</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../grpc_reflection.html">gRPC Reflection</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../grpc_status.html">gRPC Status</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../grpc_testing.html">gRPC Testing</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../glossary.html">Glossary</a></li>
+</ul>
+
+<div class="relations">
+<h3>Related Topics</h3>
+<ul>
+  <li><a href="../../../index.html">Documentation overview</a><ul>
+  <li><a href="../../index.html">Module code</a><ul>
+  </ul></li>
+  </ul></li>
+</ul>
+</div>
+<div id="searchbox" style="display: none" role="search">
+  <h3 id="searchlabel">Quick search</h3>
+    <div class="searchformwrapper">
+    <form class="search" action="../../../search.html" method="get">
+      <input type="text" name="q" aria-labelledby="searchlabel" />
+      <input type="submit" value="Go" />
+    </form>
+    </div>
+</div>
+<script>$('#searchbox').show(0);</script>
+
+
+
+
+
+
+
+
+        </div>
+      </div>
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          
+
+          <div class="body" role="main">
+            
+  <h1>Source code for grpc_channelz.v1._servicer</h1><div class="highlight"><pre>
+<span></span><span class="c1"># Copyright 2020 The gRPC Authors</span>
+<span class="c1">#</span>
+<span class="c1"># Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span>
+<span class="c1"># you may not use this file except in compliance with the License.</span>
+<span class="c1"># You may obtain a copy of the License at</span>
+<span class="c1">#</span>
+<span class="c1">#     http://www.apache.org/licenses/LICENSE-2.0</span>
+<span class="c1">#</span>
+<span class="c1"># Unless required by applicable law or agreed to in writing, software</span>
+<span class="c1"># distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span>
+<span class="c1"># WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
+<span class="c1"># See the License for the specific language governing permissions and</span>
+<span class="c1"># limitations under the License.</span>
+<span class="sd">&quot;&quot;&quot;Channelz debug service implementation in gRPC Python.&quot;&quot;&quot;</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">import</span> <span class="nn">grpc_channelz.v1.channelz_pb2</span> <span class="k">as</span> <span class="nn">_channelz_pb2</span>
+<span class="kn">import</span> <span class="nn">grpc_channelz.v1.channelz_pb2_grpc</span> <span class="k">as</span> <span class="nn">_channelz_pb2_grpc</span>
+
+<span class="kn">from</span> <span class="nn">google.protobuf</span> <span class="kn">import</span> <span class="n">json_format</span>
+
+
+<div class="viewcode-block" id="ChannelzServicer"><a class="viewcode-back" href="../../../grpc_channelz.html#grpc_channelz.v1.channelz.ChannelzServicer">[docs]</a><span class="k">class</span> <span class="nc">ChannelzServicer</span><span class="p">(</span><span class="n">_channelz_pb2_grpc</span><span class="o">.</span><span class="n">ChannelzServicer</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;Servicer handling RPCs for service statuses.&quot;&quot;&quot;</span>
+
+<div class="viewcode-block" id="ChannelzServicer.GetTopChannels"><a class="viewcode-back" href="../../../grpc_channelz.html#grpc_channelz.v1.channelz.ChannelzServicer.GetTopChannels">[docs]</a>    <span class="nd">@staticmethod</span>
+    <span class="k">def</span> <span class="nf">GetTopChannels</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">context</span><span class="p">):</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="k">return</span> <span class="n">json_format</span><span class="o">.</span><span class="n">Parse</span><span class="p">(</span>
+                <span class="n">cygrpc</span><span class="o">.</span><span class="n">channelz_get_top_channels</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">start_channel_id</span><span class="p">),</span>
+                <span class="n">_channelz_pb2</span><span class="o">.</span><span class="n">GetTopChannelsResponse</span><span class="p">(),</span>
+            <span class="p">)</span>
+        <span class="k">except</span> <span class="p">(</span><span class="ne">ValueError</span><span class="p">,</span> <span class="n">json_format</span><span class="o">.</span><span class="n">ParseError</span><span class="p">)</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
+            <span class="n">context</span><span class="o">.</span><span class="n">set_code</span><span class="p">(</span><span class="n">grpc</span><span class="o">.</span><span class="n">StatusCode</span><span class="o">.</span><span class="n">INTERNAL</span><span class="p">)</span>
+            <span class="n">context</span><span class="o">.</span><span class="n">set_details</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span></div>
+
+<div class="viewcode-block" id="ChannelzServicer.GetServers"><a class="viewcode-back" href="../../../grpc_channelz.html#grpc_channelz.v1.channelz.ChannelzServicer.GetServers">[docs]</a>    <span class="nd">@staticmethod</span>
+    <span class="k">def</span> <span class="nf">GetServers</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">context</span><span class="p">):</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="k">return</span> <span class="n">json_format</span><span class="o">.</span><span class="n">Parse</span><span class="p">(</span>
+                <span class="n">cygrpc</span><span class="o">.</span><span class="n">channelz_get_servers</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">start_server_id</span><span class="p">),</span>
+                <span class="n">_channelz_pb2</span><span class="o">.</span><span class="n">GetServersResponse</span><span class="p">(),</span>
+            <span class="p">)</span>
+        <span class="k">except</span> <span class="p">(</span><span class="ne">ValueError</span><span class="p">,</span> <span class="n">json_format</span><span class="o">.</span><span class="n">ParseError</span><span class="p">)</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
+            <span class="n">context</span><span class="o">.</span><span class="n">set_code</span><span class="p">(</span><span class="n">grpc</span><span class="o">.</span><span class="n">StatusCode</span><span class="o">.</span><span class="n">INTERNAL</span><span class="p">)</span>
+            <span class="n">context</span><span class="o">.</span><span class="n">set_details</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span></div>
+
+<div class="viewcode-block" id="ChannelzServicer.GetServer"><a class="viewcode-back" href="../../../grpc_channelz.html#grpc_channelz.v1.channelz.ChannelzServicer.GetServer">[docs]</a>    <span class="nd">@staticmethod</span>
+    <span class="k">def</span> <span class="nf">GetServer</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">context</span><span class="p">):</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="k">return</span> <span class="n">json_format</span><span class="o">.</span><span class="n">Parse</span><span class="p">(</span>
+                <span class="n">cygrpc</span><span class="o">.</span><span class="n">channelz_get_server</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">server_id</span><span class="p">),</span>
+                <span class="n">_channelz_pb2</span><span class="o">.</span><span class="n">GetServerResponse</span><span class="p">(),</span>
+            <span class="p">)</span>
+        <span class="k">except</span> <span class="ne">ValueError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
+            <span class="n">context</span><span class="o">.</span><span class="n">set_code</span><span class="p">(</span><span class="n">grpc</span><span class="o">.</span><span class="n">StatusCode</span><span class="o">.</span><span class="n">NOT_FOUND</span><span class="p">)</span>
+            <span class="n">context</span><span class="o">.</span><span class="n">set_details</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
+        <span class="k">except</span> <span class="n">json_format</span><span class="o">.</span><span class="n">ParseError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
+            <span class="n">context</span><span class="o">.</span><span class="n">set_code</span><span class="p">(</span><span class="n">grpc</span><span class="o">.</span><span class="n">StatusCode</span><span class="o">.</span><span class="n">INTERNAL</span><span class="p">)</span>
+            <span class="n">context</span><span class="o">.</span><span class="n">set_details</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span></div>
+
+<div class="viewcode-block" id="ChannelzServicer.GetServerSockets"><a class="viewcode-back" href="../../../grpc_channelz.html#grpc_channelz.v1.channelz.ChannelzServicer.GetServerSockets">[docs]</a>    <span class="nd">@staticmethod</span>
+    <span class="k">def</span> <span class="nf">GetServerSockets</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">context</span><span class="p">):</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="k">return</span> <span class="n">json_format</span><span class="o">.</span><span class="n">Parse</span><span class="p">(</span>
+                <span class="n">cygrpc</span><span class="o">.</span><span class="n">channelz_get_server_sockets</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">server_id</span><span class="p">,</span>
+                                                   <span class="n">request</span><span class="o">.</span><span class="n">start_socket_id</span><span class="p">,</span>
+                                                   <span class="n">request</span><span class="o">.</span><span class="n">max_results</span><span class="p">),</span>
+                <span class="n">_channelz_pb2</span><span class="o">.</span><span class="n">GetServerSocketsResponse</span><span class="p">(),</span>
+            <span class="p">)</span>
+        <span class="k">except</span> <span class="ne">ValueError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
+            <span class="n">context</span><span class="o">.</span><span class="n">set_code</span><span class="p">(</span><span class="n">grpc</span><span class="o">.</span><span class="n">StatusCode</span><span class="o">.</span><span class="n">NOT_FOUND</span><span class="p">)</span>
+            <span class="n">context</span><span class="o">.</span><span class="n">set_details</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
+        <span class="k">except</span> <span class="n">json_format</span><span class="o">.</span><span class="n">ParseError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
+            <span class="n">context</span><span class="o">.</span><span class="n">set_code</span><span class="p">(</span><span class="n">grpc</span><span class="o">.</span><span class="n">StatusCode</span><span class="o">.</span><span class="n">INTERNAL</span><span class="p">)</span>
+            <span class="n">context</span><span class="o">.</span><span class="n">set_details</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span></div>
+
+<div class="viewcode-block" id="ChannelzServicer.GetChannel"><a class="viewcode-back" href="../../../grpc_channelz.html#grpc_channelz.v1.channelz.ChannelzServicer.GetChannel">[docs]</a>    <span class="nd">@staticmethod</span>
+    <span class="k">def</span> <span class="nf">GetChannel</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">context</span><span class="p">):</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="k">return</span> <span class="n">json_format</span><span class="o">.</span><span class="n">Parse</span><span class="p">(</span>
+                <span class="n">cygrpc</span><span class="o">.</span><span class="n">channelz_get_channel</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">channel_id</span><span class="p">),</span>
+                <span class="n">_channelz_pb2</span><span class="o">.</span><span class="n">GetChannelResponse</span><span class="p">(),</span>
+            <span class="p">)</span>
+        <span class="k">except</span> <span class="ne">ValueError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
+            <span class="n">context</span><span class="o">.</span><span class="n">set_code</span><span class="p">(</span><span class="n">grpc</span><span class="o">.</span><span class="n">StatusCode</span><span class="o">.</span><span class="n">NOT_FOUND</span><span class="p">)</span>
+            <span class="n">context</span><span class="o">.</span><span class="n">set_details</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
+        <span class="k">except</span> <span class="n">json_format</span><span class="o">.</span><span class="n">ParseError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
+            <span class="n">context</span><span class="o">.</span><span class="n">set_code</span><span class="p">(</span><span class="n">grpc</span><span class="o">.</span><span class="n">StatusCode</span><span class="o">.</span><span class="n">INTERNAL</span><span class="p">)</span>
+            <span class="n">context</span><span class="o">.</span><span class="n">set_details</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span></div>
+
+<div class="viewcode-block" id="ChannelzServicer.GetSubchannel"><a class="viewcode-back" href="../../../grpc_channelz.html#grpc_channelz.v1.channelz.ChannelzServicer.GetSubchannel">[docs]</a>    <span class="nd">@staticmethod</span>
+    <span class="k">def</span> <span class="nf">GetSubchannel</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">context</span><span class="p">):</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="k">return</span> <span class="n">json_format</span><span class="o">.</span><span class="n">Parse</span><span class="p">(</span>
+                <span class="n">cygrpc</span><span class="o">.</span><span class="n">channelz_get_subchannel</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">subchannel_id</span><span class="p">),</span>
+                <span class="n">_channelz_pb2</span><span class="o">.</span><span class="n">GetSubchannelResponse</span><span class="p">(),</span>
+            <span class="p">)</span>
+        <span class="k">except</span> <span class="ne">ValueError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
+            <span class="n">context</span><span class="o">.</span><span class="n">set_code</span><span class="p">(</span><span class="n">grpc</span><span class="o">.</span><span class="n">StatusCode</span><span class="o">.</span><span class="n">NOT_FOUND</span><span class="p">)</span>
+            <span class="n">context</span><span class="o">.</span><span class="n">set_details</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
+        <span class="k">except</span> <span class="n">json_format</span><span class="o">.</span><span class="n">ParseError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
+            <span class="n">context</span><span class="o">.</span><span class="n">set_code</span><span class="p">(</span><span class="n">grpc</span><span class="o">.</span><span class="n">StatusCode</span><span class="o">.</span><span class="n">INTERNAL</span><span class="p">)</span>
+            <span class="n">context</span><span class="o">.</span><span class="n">set_details</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span></div>
+
+<div class="viewcode-block" id="ChannelzServicer.GetSocket"><a class="viewcode-back" href="../../../grpc_channelz.html#grpc_channelz.v1.channelz.ChannelzServicer.GetSocket">[docs]</a>    <span class="nd">@staticmethod</span>
+    <span class="k">def</span> <span class="nf">GetSocket</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">context</span><span class="p">):</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="k">return</span> <span class="n">json_format</span><span class="o">.</span><span class="n">Parse</span><span class="p">(</span>
+                <span class="n">cygrpc</span><span class="o">.</span><span class="n">channelz_get_socket</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">socket_id</span><span class="p">),</span>
+                <span class="n">_channelz_pb2</span><span class="o">.</span><span class="n">GetSocketResponse</span><span class="p">(),</span>
+            <span class="p">)</span>
+        <span class="k">except</span> <span class="ne">ValueError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
+            <span class="n">context</span><span class="o">.</span><span class="n">set_code</span><span class="p">(</span><span class="n">grpc</span><span class="o">.</span><span class="n">StatusCode</span><span class="o">.</span><span class="n">NOT_FOUND</span><span class="p">)</span>
+            <span class="n">context</span><span class="o">.</span><span class="n">set_details</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
+        <span class="k">except</span> <span class="n">json_format</span><span class="o">.</span><span class="n">ParseError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
+            <span class="n">context</span><span class="o">.</span><span class="n">set_code</span><span class="p">(</span><span class="n">grpc</span><span class="o">.</span><span class="n">StatusCode</span><span class="o">.</span><span class="n">INTERNAL</span><span class="p">)</span>
+            <span class="n">context</span><span class="o">.</span><span class="n">set_details</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span></div></div>
+</pre></div>
+
+          </div>
+          
+        </div>
+      </div>
+    <div class="clearer"></div>
+  </div>
+    <div class="footer">
+      &copy;2020, The gRPC Authors.
+      
+    </div>
+
+    
+
+    
+    <script type="text/javascript">
+
+      var _gaq = _gaq || [];
+      _gaq.push(['_setAccount', 'UA-60127042-1']);
+      _gaq.push(['_setDomainName', 'none']);
+      _gaq.push(['_setAllowLinker', true]);
+      _gaq.push(['_trackPageview']);
+
+      (function() {
+        var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+      })();
+
+    </script>
+    
+  </body>
+</html>

+ 58 - 126
python/_modules/grpc_channelz/v1/channelz.html

@@ -4,7 +4,8 @@
 <html lang="en">
   <head>
     <meta charset="utf-8" />
-    <title>grpc_channelz.v1.channelz &#8212; gRPC Python 1.29.0 documentation</title>
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>grpc_channelz.v1.channelz &#8212; 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>
 
 
 
@@ -100,133 +101,64 @@
 <span class="c1"># limitations under the License.</span>
 <span class="sd">&quot;&quot;&quot;Channelz debug service implementation in gRPC Python.&quot;&quot;&quot;</span>
 
+<span class="kn">import</span> <span class="nn">sys</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">import</span> <span class="nn">grpc_channelz.v1.channelz_pb2</span> <span class="k">as</span> <span class="nn">_channelz_pb2</span>
 <span class="kn">import</span> <span class="nn">grpc_channelz.v1.channelz_pb2_grpc</span> <span class="k">as</span> <span class="nn">_channelz_pb2_grpc</span>
+<span class="kn">from</span> <span class="nn">grpc_channelz.v1._servicer</span> <span class="kn">import</span> <span class="n">ChannelzServicer</span>
 
-<span class="kn">from</span> <span class="nn">google.protobuf</span> <span class="kn">import</span> <span class="n">json_format</span>
-
-
-<div class="viewcode-block" id="ChannelzServicer"><a class="viewcode-back" href="../../../grpc_channelz.html#grpc_channelz.v1.channelz.ChannelzServicer">[docs]</a><span class="k">class</span> <span class="nc">ChannelzServicer</span><span class="p">(</span><span class="n">_channelz_pb2_grpc</span><span class="o">.</span><span class="n">ChannelzServicer</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Servicer handling RPCs for service statuses.&quot;&quot;&quot;</span>
-
-<div class="viewcode-block" id="ChannelzServicer.GetTopChannels"><a class="viewcode-back" href="../../../grpc_channelz.html#grpc_channelz.v1.channelz.ChannelzServicer.GetTopChannels">[docs]</a>    <span class="nd">@staticmethod</span>
-    <span class="k">def</span> <span class="nf">GetTopChannels</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">context</span><span class="p">):</span>
-        <span class="k">try</span><span class="p">:</span>
-            <span class="k">return</span> <span class="n">json_format</span><span class="o">.</span><span class="n">Parse</span><span class="p">(</span>
-                <span class="n">cygrpc</span><span class="o">.</span><span class="n">channelz_get_top_channels</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">start_channel_id</span><span class="p">),</span>
-                <span class="n">_channelz_pb2</span><span class="o">.</span><span class="n">GetTopChannelsResponse</span><span class="p">(),</span>
-            <span class="p">)</span>
-        <span class="k">except</span> <span class="p">(</span><span class="ne">ValueError</span><span class="p">,</span> <span class="n">json_format</span><span class="o">.</span><span class="n">ParseError</span><span class="p">)</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
-            <span class="n">context</span><span class="o">.</span><span class="n">set_code</span><span class="p">(</span><span class="n">grpc</span><span class="o">.</span><span class="n">StatusCode</span><span class="o">.</span><span class="n">INTERNAL</span><span class="p">)</span>
-            <span class="n">context</span><span class="o">.</span><span class="n">set_details</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span></div>
-
-<div class="viewcode-block" id="ChannelzServicer.GetServers"><a class="viewcode-back" href="../../../grpc_channelz.html#grpc_channelz.v1.channelz.ChannelzServicer.GetServers">[docs]</a>    <span class="nd">@staticmethod</span>
-    <span class="k">def</span> <span class="nf">GetServers</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">context</span><span class="p">):</span>
-        <span class="k">try</span><span class="p">:</span>
-            <span class="k">return</span> <span class="n">json_format</span><span class="o">.</span><span class="n">Parse</span><span class="p">(</span>
-                <span class="n">cygrpc</span><span class="o">.</span><span class="n">channelz_get_servers</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">start_server_id</span><span class="p">),</span>
-                <span class="n">_channelz_pb2</span><span class="o">.</span><span class="n">GetServersResponse</span><span class="p">(),</span>
-            <span class="p">)</span>
-        <span class="k">except</span> <span class="p">(</span><span class="ne">ValueError</span><span class="p">,</span> <span class="n">json_format</span><span class="o">.</span><span class="n">ParseError</span><span class="p">)</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
-            <span class="n">context</span><span class="o">.</span><span class="n">set_code</span><span class="p">(</span><span class="n">grpc</span><span class="o">.</span><span class="n">StatusCode</span><span class="o">.</span><span class="n">INTERNAL</span><span class="p">)</span>
-            <span class="n">context</span><span class="o">.</span><span class="n">set_details</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span></div>
-
-<div class="viewcode-block" id="ChannelzServicer.GetServer"><a class="viewcode-back" href="../../../grpc_channelz.html#grpc_channelz.v1.channelz.ChannelzServicer.GetServer">[docs]</a>    <span class="nd">@staticmethod</span>
-    <span class="k">def</span> <span class="nf">GetServer</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">context</span><span class="p">):</span>
-        <span class="k">try</span><span class="p">:</span>
-            <span class="k">return</span> <span class="n">json_format</span><span class="o">.</span><span class="n">Parse</span><span class="p">(</span>
-                <span class="n">cygrpc</span><span class="o">.</span><span class="n">channelz_get_server</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">server_id</span><span class="p">),</span>
-                <span class="n">_channelz_pb2</span><span class="o">.</span><span class="n">GetServerResponse</span><span class="p">(),</span>
-            <span class="p">)</span>
-        <span class="k">except</span> <span class="ne">ValueError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
-            <span class="n">context</span><span class="o">.</span><span class="n">set_code</span><span class="p">(</span><span class="n">grpc</span><span class="o">.</span><span class="n">StatusCode</span><span class="o">.</span><span class="n">NOT_FOUND</span><span class="p">)</span>
-            <span class="n">context</span><span class="o">.</span><span class="n">set_details</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
-        <span class="k">except</span> <span class="n">json_format</span><span class="o">.</span><span class="n">ParseError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
-            <span class="n">context</span><span class="o">.</span><span class="n">set_code</span><span class="p">(</span><span class="n">grpc</span><span class="o">.</span><span class="n">StatusCode</span><span class="o">.</span><span class="n">INTERNAL</span><span class="p">)</span>
-            <span class="n">context</span><span class="o">.</span><span class="n">set_details</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span></div>
-
-<div class="viewcode-block" id="ChannelzServicer.GetServerSockets"><a class="viewcode-back" href="../../../grpc_channelz.html#grpc_channelz.v1.channelz.ChannelzServicer.GetServerSockets">[docs]</a>    <span class="nd">@staticmethod</span>
-    <span class="k">def</span> <span class="nf">GetServerSockets</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">context</span><span class="p">):</span>
-        <span class="k">try</span><span class="p">:</span>
-            <span class="k">return</span> <span class="n">json_format</span><span class="o">.</span><span class="n">Parse</span><span class="p">(</span>
-                <span class="n">cygrpc</span><span class="o">.</span><span class="n">channelz_get_server_sockets</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">server_id</span><span class="p">,</span>
-                                                   <span class="n">request</span><span class="o">.</span><span class="n">start_socket_id</span><span class="p">,</span>
-                                                   <span class="n">request</span><span class="o">.</span><span class="n">max_results</span><span class="p">),</span>
-                <span class="n">_channelz_pb2</span><span class="o">.</span><span class="n">GetServerSocketsResponse</span><span class="p">(),</span>
-            <span class="p">)</span>
-        <span class="k">except</span> <span class="ne">ValueError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
-            <span class="n">context</span><span class="o">.</span><span class="n">set_code</span><span class="p">(</span><span class="n">grpc</span><span class="o">.</span><span class="n">StatusCode</span><span class="o">.</span><span class="n">NOT_FOUND</span><span class="p">)</span>
-            <span class="n">context</span><span class="o">.</span><span class="n">set_details</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
-        <span class="k">except</span> <span class="n">json_format</span><span class="o">.</span><span class="n">ParseError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
-            <span class="n">context</span><span class="o">.</span><span class="n">set_code</span><span class="p">(</span><span class="n">grpc</span><span class="o">.</span><span class="n">StatusCode</span><span class="o">.</span><span class="n">INTERNAL</span><span class="p">)</span>
-            <span class="n">context</span><span class="o">.</span><span class="n">set_details</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span></div>
-
-<div class="viewcode-block" id="ChannelzServicer.GetChannel"><a class="viewcode-back" href="../../../grpc_channelz.html#grpc_channelz.v1.channelz.ChannelzServicer.GetChannel">[docs]</a>    <span class="nd">@staticmethod</span>
-    <span class="k">def</span> <span class="nf">GetChannel</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">context</span><span class="p">):</span>
-        <span class="k">try</span><span class="p">:</span>
-            <span class="k">return</span> <span class="n">json_format</span><span class="o">.</span><span class="n">Parse</span><span class="p">(</span>
-                <span class="n">cygrpc</span><span class="o">.</span><span class="n">channelz_get_channel</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">channel_id</span><span class="p">),</span>
-                <span class="n">_channelz_pb2</span><span class="o">.</span><span class="n">GetChannelResponse</span><span class="p">(),</span>
-            <span class="p">)</span>
-        <span class="k">except</span> <span class="ne">ValueError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
-            <span class="n">context</span><span class="o">.</span><span class="n">set_code</span><span class="p">(</span><span class="n">grpc</span><span class="o">.</span><span class="n">StatusCode</span><span class="o">.</span><span class="n">NOT_FOUND</span><span class="p">)</span>
-            <span class="n">context</span><span class="o">.</span><span class="n">set_details</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
-        <span class="k">except</span> <span class="n">json_format</span><span class="o">.</span><span class="n">ParseError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
-            <span class="n">context</span><span class="o">.</span><span class="n">set_code</span><span class="p">(</span><span class="n">grpc</span><span class="o">.</span><span class="n">StatusCode</span><span class="o">.</span><span class="n">INTERNAL</span><span class="p">)</span>
-            <span class="n">context</span><span class="o">.</span><span class="n">set_details</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span></div>
-
-<div class="viewcode-block" id="ChannelzServicer.GetSubchannel"><a class="viewcode-back" href="../../../grpc_channelz.html#grpc_channelz.v1.channelz.ChannelzServicer.GetSubchannel">[docs]</a>    <span class="nd">@staticmethod</span>
-    <span class="k">def</span> <span class="nf">GetSubchannel</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">context</span><span class="p">):</span>
-        <span class="k">try</span><span class="p">:</span>
-            <span class="k">return</span> <span class="n">json_format</span><span class="o">.</span><span class="n">Parse</span><span class="p">(</span>
-                <span class="n">cygrpc</span><span class="o">.</span><span class="n">channelz_get_subchannel</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">subchannel_id</span><span class="p">),</span>
-                <span class="n">_channelz_pb2</span><span class="o">.</span><span class="n">GetSubchannelResponse</span><span class="p">(),</span>
-            <span class="p">)</span>
-        <span class="k">except</span> <span class="ne">ValueError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
-            <span class="n">context</span><span class="o">.</span><span class="n">set_code</span><span class="p">(</span><span class="n">grpc</span><span class="o">.</span><span class="n">StatusCode</span><span class="o">.</span><span class="n">NOT_FOUND</span><span class="p">)</span>
-            <span class="n">context</span><span class="o">.</span><span class="n">set_details</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
-        <span class="k">except</span> <span class="n">json_format</span><span class="o">.</span><span class="n">ParseError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
-            <span class="n">context</span><span class="o">.</span><span class="n">set_code</span><span class="p">(</span><span class="n">grpc</span><span class="o">.</span><span class="n">StatusCode</span><span class="o">.</span><span class="n">INTERNAL</span><span class="p">)</span>
-            <span class="n">context</span><span class="o">.</span><span class="n">set_details</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span></div>
-
-<div class="viewcode-block" id="ChannelzServicer.GetSocket"><a class="viewcode-back" href="../../../grpc_channelz.html#grpc_channelz.v1.channelz.ChannelzServicer.GetSocket">[docs]</a>    <span class="nd">@staticmethod</span>
-    <span class="k">def</span> <span class="nf">GetSocket</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">context</span><span class="p">):</span>
-        <span class="k">try</span><span class="p">:</span>
-            <span class="k">return</span> <span class="n">json_format</span><span class="o">.</span><span class="n">Parse</span><span class="p">(</span>
-                <span class="n">cygrpc</span><span class="o">.</span><span class="n">channelz_get_socket</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">socket_id</span><span class="p">),</span>
-                <span class="n">_channelz_pb2</span><span class="o">.</span><span class="n">GetSocketResponse</span><span class="p">(),</span>
-            <span class="p">)</span>
-        <span class="k">except</span> <span class="ne">ValueError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
-            <span class="n">context</span><span class="o">.</span><span class="n">set_code</span><span class="p">(</span><span class="n">grpc</span><span class="o">.</span><span class="n">StatusCode</span><span class="o">.</span><span class="n">NOT_FOUND</span><span class="p">)</span>
-            <span class="n">context</span><span class="o">.</span><span class="n">set_details</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
-        <span class="k">except</span> <span class="n">json_format</span><span class="o">.</span><span class="n">ParseError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
-            <span class="n">context</span><span class="o">.</span><span class="n">set_code</span><span class="p">(</span><span class="n">grpc</span><span class="o">.</span><span class="n">StatusCode</span><span class="o">.</span><span class="n">INTERNAL</span><span class="p">)</span>
-            <span class="n">context</span><span class="o">.</span><span class="n">set_details</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span></div></div>
-
-
-<div class="viewcode-block" id="add_channelz_servicer"><a class="viewcode-back" href="../../../grpc_channelz.html#grpc_channelz.v1.channelz.add_channelz_servicer">[docs]</a><span class="k">def</span> <span class="nf">add_channelz_servicer</span><span class="p">(</span><span class="n">server</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Add Channelz servicer to a server. Channelz servicer is in charge of</span>
-<span class="sd">    pulling information from C-Core for entire process. It will allow the</span>
-<span class="sd">    server to response to Channelz queries.</span>
-
-<span class="sd">    The Channelz statistic is enabled by default inside C-Core. Whether the</span>
-<span class="sd">    statistic is enabled or not is isolated from adding Channelz servicer.</span>
-<span class="sd">    That means you can query Channelz info with a Channelz-disabled channel,</span>
-<span class="sd">    and you can add Channelz servicer to a Channelz-disabled server.</span>
-
-<span class="sd">    The Channelz statistic can be enabled or disabled by channel option</span>
-<span class="sd">    &#39;grpc.enable_channelz&#39;. Set to 1 to enable, set to 0 to disable.</span>
-
-<span class="sd">    This is an EXPERIMENTAL API.</span>
-
-<span class="sd">    Args:</span>
-<span class="sd">      server: grpc.Server to which Channelz service will be added.</span>
-<span class="sd">    &quot;&quot;&quot;</span>
-    <span class="n">_channelz_pb2_grpc</span><span class="o">.</span><span class="n">add_ChannelzServicer_to_server</span><span class="p">(</span><span class="n">ChannelzServicer</span><span class="p">(),</span>
-                                                      <span class="n">server</span><span class="p">)</span></div>
+<span class="n">_add_channelz_servicer_doc</span> <span class="o">=</span> <span class="s2">&quot;&quot;&quot;Add Channelz servicer to a server.</span>
+
+<span class="s2">Channelz servicer is in charge of</span>
+<span class="s2">pulling information from C-Core for entire process. It will allow the</span>
+<span class="s2">server to response to Channelz queries.</span>
+
+<span class="s2">The Channelz statistic is enabled by default inside C-Core. Whether the</span>
+<span class="s2">statistic is enabled or not is isolated from adding Channelz servicer.</span>
+<span class="s2">That means you can query Channelz info with a Channelz-disabled channel,</span>
+<span class="s2">and you can add Channelz servicer to a Channelz-disabled server.</span>
+
+<span class="s2">The Channelz statistic can be enabled or disabled by channel option</span>
+<span class="s2">&#39;grpc.enable_channelz&#39;. Set to 1 to enable, set to 0 to disable.</span>
+
+<span class="s2">This is an EXPERIMENTAL API.</span>
+
+<span class="s2">Args:</span>
+<span class="s2">    server: A gRPC server to which Channelz service will be added.</span>
+<span class="s2">&quot;&quot;&quot;</span>
+
+<span class="k">if</span> <span class="n">sys</span><span class="o">.</span><span class="n">version_info</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">&gt;=</span> <span class="mi">3</span> <span class="ow">and</span> <span class="n">sys</span><span class="o">.</span><span class="n">version_info</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">&gt;=</span> <span class="mi">6</span><span class="p">:</span>
+    <span class="kn">from</span> <span class="nn">grpc_channelz.v1</span> <span class="kn">import</span> <span class="n">_async</span> <span class="k">as</span> <span class="n">aio</span>
+
+    <span class="k">def</span> <span class="nf">add_channelz_servicer</span><span class="p">(</span><span class="n">server</span><span class="p">):</span>
+
+        <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">server</span><span class="p">,</span> <span class="n">grpc</span><span class="o">.</span><span class="n">experimental</span><span class="o">.</span><span class="n">aio</span><span class="o">.</span><span class="n">Server</span><span class="p">):</span>
+            <span class="n">_channelz_pb2_grpc</span><span class="o">.</span><span class="n">add_ChannelzServicer_to_server</span><span class="p">(</span>
+                <span class="n">aio</span><span class="o">.</span><span class="n">ChannelzServicer</span><span class="p">(),</span> <span class="n">server</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">_channelz_pb2_grpc</span><span class="o">.</span><span class="n">add_ChannelzServicer_to_server</span><span class="p">(</span>
+                <span class="n">ChannelzServicer</span><span class="p">(),</span> <span class="n">server</span><span class="p">)</span>
+
+    <span class="n">add_channelz_servicer</span><span class="o">.</span><span class="vm">__doc__</span> <span class="o">=</span> <span class="n">_add_channelz_servicer_doc</span>
+
+    <span class="n">__all__</span> <span class="o">=</span> <span class="p">[</span>
+        <span class="s2">&quot;aio&quot;</span><span class="p">,</span>
+        <span class="s2">&quot;add_channelz_servicer&quot;</span><span class="p">,</span>
+        <span class="s2">&quot;ChannelzServicer&quot;</span><span class="p">,</span>
+    <span class="p">]</span>
+
+<span class="k">else</span><span class="p">:</span>
+
+<div class="viewcode-block" id="add_channelz_servicer"><a class="viewcode-back" href="../../../grpc_channelz.html#grpc_channelz.v1.channelz.add_channelz_servicer">[docs]</a>    <span class="k">def</span> <span class="nf">add_channelz_servicer</span><span class="p">(</span><span class="n">server</span><span class="p">):</span>
+        <span class="n">_channelz_pb2_grpc</span><span class="o">.</span><span class="n">add_ChannelzServicer_to_server</span><span class="p">(</span>
+            <span class="n">ChannelzServicer</span><span class="p">(),</span> <span class="n">server</span><span class="p">)</span></div>
+
+    <span class="n">add_channelz_servicer</span><span class="o">.</span><span class="vm">__doc__</span> <span class="o">=</span> <span class="n">_add_channelz_servicer_doc</span>
+
+    <span class="n">__all__</span> <span class="o">=</span> <span class="p">[</span>
+        <span class="s2">&quot;add_channelz_servicer&quot;</span><span class="p">,</span>
+        <span class="s2">&quot;ChannelzServicer&quot;</span><span class="p">,</span>
+    <span class="p">]</span>
 </pre></div>
 
           </div>
@@ -236,7 +168,7 @@
     <div class="clearer"></div>
   </div>
     <div class="footer">
-      &copy;2018, The gRPC Authors.
+      &copy;2020, The gRPC Authors.
       
     </div>
 

+ 4 - 3
python/_modules/grpc_health/v1/health.html

@@ -4,7 +4,8 @@
 <html lang="en">
   <head>
     <meta charset="utf-8" />
-    <title>grpc_health.v1.health &#8212; gRPC Python 1.29.0 documentation</title>
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>grpc_health.v1.health &#8212; 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>
 
 
 
@@ -266,7 +267,7 @@
     <div class="clearer"></div>
   </div>
     <div class="footer">
-      &copy;2018, The gRPC Authors.
+      &copy;2020, The gRPC Authors.
       
     </div>
 

+ 49 - 95
python/_modules/grpc_reflection/v1alpha/reflection.html

@@ -4,7 +4,8 @@
 <html lang="en">
   <head>
     <meta charset="utf-8" />
-    <title>grpc_reflection.v1alpha.reflection &#8212; gRPC Python 1.29.0 documentation</title>
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>grpc_reflection.v1alpha.reflection &#8212; 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>
 
 
 
@@ -100,100 +101,21 @@
 <span class="c1"># limitations under the License.</span>
 <span class="sd">&quot;&quot;&quot;Reference implementation for reflection in gRPC Python.&quot;&quot;&quot;</span>
 
+<span class="kn">import</span> <span class="nn">sys</span>
 <span class="kn">import</span> <span class="nn">grpc</span>
-<span class="kn">from</span> <span class="nn">google.protobuf</span> <span class="kn">import</span> <span class="n">descriptor_pb2</span>
-<span class="kn">from</span> <span class="nn">google.protobuf</span> <span class="kn">import</span> <span class="n">descriptor_pool</span>
 
 <span class="kn">from</span> <span class="nn">grpc_reflection.v1alpha</span> <span class="kn">import</span> <span class="n">reflection_pb2</span> <span class="k">as</span> <span class="n">_reflection_pb2</span>
 <span class="kn">from</span> <span class="nn">grpc_reflection.v1alpha</span> <span class="kn">import</span> <span class="n">reflection_pb2_grpc</span> <span class="k">as</span> <span class="n">_reflection_pb2_grpc</span>
 
-<span class="n">_POOL</span> <span class="o">=</span> <span class="n">descriptor_pool</span><span class="o">.</span><span class="n">Default</span><span class="p">()</span>
+<span class="kn">from</span> <span class="nn">grpc_reflection.v1alpha._base</span> <span class="kn">import</span> <span class="n">BaseReflectionServicer</span>
+
 <span class="n">SERVICE_NAME</span> <span class="o">=</span> <span class="n">_reflection_pb2</span><span class="o">.</span><span class="n">DESCRIPTOR</span><span class="o">.</span><span class="n">services_by_name</span><span class="p">[</span>
     <span class="s1">&#39;ServerReflection&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">full_name</span>
 
 
-<span class="k">def</span> <span class="nf">_not_found_error</span><span class="p">():</span>
-    <span class="k">return</span> <span class="n">_reflection_pb2</span><span class="o">.</span><span class="n">ServerReflectionResponse</span><span class="p">(</span>
-        <span class="n">error_response</span><span class="o">=</span><span class="n">_reflection_pb2</span><span class="o">.</span><span class="n">ErrorResponse</span><span class="p">(</span>
-            <span class="n">error_code</span><span class="o">=</span><span class="n">grpc</span><span class="o">.</span><span class="n">StatusCode</span><span class="o">.</span><span class="n">NOT_FOUND</span><span class="o">.</span><span class="n">value</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
-            <span class="n">error_message</span><span class="o">=</span><span class="n">grpc</span><span class="o">.</span><span class="n">StatusCode</span><span class="o">.</span><span class="n">NOT_FOUND</span><span class="o">.</span><span class="n">value</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">encode</span><span class="p">(),</span>
-        <span class="p">))</span>
-
-
-<span class="k">def</span> <span class="nf">_file_descriptor_response</span><span class="p">(</span><span class="n">descriptor</span><span class="p">):</span>
-    <span class="n">proto</span> <span class="o">=</span> <span class="n">descriptor_pb2</span><span class="o">.</span><span class="n">FileDescriptorProto</span><span class="p">()</span>
-    <span class="n">descriptor</span><span class="o">.</span><span class="n">CopyToProto</span><span class="p">(</span><span class="n">proto</span><span class="p">)</span>
-    <span class="n">serialized_proto</span> <span class="o">=</span> <span class="n">proto</span><span class="o">.</span><span class="n">SerializeToString</span><span class="p">()</span>
-    <span class="k">return</span> <span class="n">_reflection_pb2</span><span class="o">.</span><span class="n">ServerReflectionResponse</span><span class="p">(</span>
-        <span class="n">file_descriptor_response</span><span class="o">=</span><span class="n">_reflection_pb2</span><span class="o">.</span><span class="n">FileDescriptorResponse</span><span class="p">(</span>
-            <span class="n">file_descriptor_proto</span><span class="o">=</span><span class="p">(</span><span class="n">serialized_proto</span><span class="p">,)),)</span>
-
-
-<div class="viewcode-block" id="ReflectionServicer"><a class="viewcode-back" href="../../../grpc_reflection.html#grpc_reflection.v1alpha.reflection.ReflectionServicer">[docs]</a><span class="k">class</span> <span class="nc">ReflectionServicer</span><span class="p">(</span><span class="n">_reflection_pb2_grpc</span><span class="o">.</span><span class="n">ServerReflectionServicer</span><span class="p">):</span>
+<div class="viewcode-block" id="ReflectionServicer"><a class="viewcode-back" href="../../../grpc_reflection.html#grpc_reflection.v1alpha.reflection.ReflectionServicer">[docs]</a><span class="k">class</span> <span class="nc">ReflectionServicer</span><span class="p">(</span><span class="n">BaseReflectionServicer</span><span class="p">):</span>
     <span class="sd">&quot;&quot;&quot;Servicer handling RPCs for service statuses.&quot;&quot;&quot;</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">service_names</span><span class="p">,</span> <span class="n">pool</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Constructor.</span>
-
-<span class="sd">    Args:</span>
-<span class="sd">      service_names: Iterable of fully-qualified service names available.</span>
-<span class="sd">    &quot;&quot;&quot;</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">_service_names</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span><span class="nb">sorted</span><span class="p">(</span><span class="n">service_names</span><span class="p">))</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">_pool</span> <span class="o">=</span> <span class="n">_POOL</span> <span class="k">if</span> <span class="n">pool</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">pool</span>
-
-    <span class="k">def</span> <span class="nf">_file_by_filename</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">filename</span><span class="p">):</span>
-        <span class="k">try</span><span class="p">:</span>
-            <span class="n">descriptor</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pool</span><span class="o">.</span><span class="n">FindFileByName</span><span class="p">(</span><span class="n">filename</span><span class="p">)</span>
-        <span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
-            <span class="k">return</span> <span class="n">_not_found_error</span><span class="p">()</span>
-        <span class="k">else</span><span class="p">:</span>
-            <span class="k">return</span> <span class="n">_file_descriptor_response</span><span class="p">(</span><span class="n">descriptor</span><span class="p">)</span>
-
-    <span class="k">def</span> <span class="nf">_file_containing_symbol</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">fully_qualified_name</span><span class="p">):</span>
-        <span class="k">try</span><span class="p">:</span>
-            <span class="n">descriptor</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pool</span><span class="o">.</span><span class="n">FindFileContainingSymbol</span><span class="p">(</span>
-                <span class="n">fully_qualified_name</span><span class="p">)</span>
-        <span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
-            <span class="k">return</span> <span class="n">_not_found_error</span><span class="p">()</span>
-        <span class="k">else</span><span class="p">:</span>
-            <span class="k">return</span> <span class="n">_file_descriptor_response</span><span class="p">(</span><span class="n">descriptor</span><span class="p">)</span>
-
-    <span class="k">def</span> <span class="nf">_file_containing_extension</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">containing_type</span><span class="p">,</span> <span class="n">extension_number</span><span class="p">):</span>
-        <span class="k">try</span><span class="p">:</span>
-            <span class="n">message_descriptor</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pool</span><span class="o">.</span><span class="n">FindMessageTypeByName</span><span class="p">(</span>
-                <span class="n">containing_type</span><span class="p">)</span>
-            <span class="n">extension_descriptor</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pool</span><span class="o">.</span><span class="n">FindExtensionByNumber</span><span class="p">(</span>
-                <span class="n">message_descriptor</span><span class="p">,</span> <span class="n">extension_number</span><span class="p">)</span>
-            <span class="n">descriptor</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pool</span><span class="o">.</span><span class="n">FindFileContainingSymbol</span><span class="p">(</span>
-                <span class="n">extension_descriptor</span><span class="o">.</span><span class="n">full_name</span><span class="p">)</span>
-        <span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
-            <span class="k">return</span> <span class="n">_not_found_error</span><span class="p">()</span>
-        <span class="k">else</span><span class="p">:</span>
-            <span class="k">return</span> <span class="n">_file_descriptor_response</span><span class="p">(</span><span class="n">descriptor</span><span class="p">)</span>
-
-    <span class="k">def</span> <span class="nf">_all_extension_numbers_of_type</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">containing_type</span><span class="p">):</span>
-        <span class="k">try</span><span class="p">:</span>
-            <span class="n">message_descriptor</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pool</span><span class="o">.</span><span class="n">FindMessageTypeByName</span><span class="p">(</span>
-                <span class="n">containing_type</span><span class="p">)</span>
-            <span class="n">extension_numbers</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span>
-                <span class="nb">sorted</span><span class="p">(</span><span class="n">extension</span><span class="o">.</span><span class="n">number</span> <span class="k">for</span> <span class="n">extension</span> <span class="ow">in</span>
-                       <span class="bp">self</span><span class="o">.</span><span class="n">_pool</span><span class="o">.</span><span class="n">FindAllExtensions</span><span class="p">(</span><span class="n">message_descriptor</span><span class="p">)))</span>
-        <span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
-            <span class="k">return</span> <span class="n">_not_found_error</span><span class="p">()</span>
-        <span class="k">else</span><span class="p">:</span>
-            <span class="k">return</span> <span class="n">_reflection_pb2</span><span class="o">.</span><span class="n">ServerReflectionResponse</span><span class="p">(</span>
-                <span class="n">all_extension_numbers_response</span><span class="o">=</span><span class="n">_reflection_pb2</span><span class="o">.</span>
-                <span class="n">ExtensionNumberResponse</span><span class="p">(</span>
-                    <span class="n">base_type_name</span><span class="o">=</span><span class="n">message_descriptor</span><span class="o">.</span><span class="n">full_name</span><span class="p">,</span>
-                    <span class="n">extension_number</span><span class="o">=</span><span class="n">extension_numbers</span><span class="p">))</span>
-
-    <span class="k">def</span> <span class="nf">_list_services</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="k">return</span> <span class="n">_reflection_pb2</span><span class="o">.</span><span class="n">ServerReflectionResponse</span><span class="p">(</span>
-            <span class="n">list_services_response</span><span class="o">=</span><span class="n">_reflection_pb2</span><span class="o">.</span><span class="n">ListServiceResponse</span><span class="p">(</span><span class="n">service</span><span class="o">=</span><span class="p">[</span>
-                <span class="n">_reflection_pb2</span><span class="o">.</span><span class="n">ServiceResponse</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="n">service_name</span><span class="p">)</span>
-                <span class="k">for</span> <span class="n">service_name</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_service_names</span>
-            <span class="p">]))</span>
-
 <div class="viewcode-block" id="ReflectionServicer.ServerReflectionInfo"><a class="viewcode-back" href="../../../grpc_reflection.html#grpc_reflection.v1alpha.reflection.ReflectionServicer.ServerReflectionInfo">[docs]</a>    <span class="k">def</span> <span class="nf">ServerReflectionInfo</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">context</span><span class="p">):</span>
         <span class="c1"># pylint: disable=unused-argument</span>
         <span class="k">for</span> <span class="n">request</span> <span class="ow">in</span> <span class="n">request_iterator</span><span class="p">:</span>
@@ -220,16 +142,48 @@
                     <span class="p">))</span></div></div>
 
 
-<div class="viewcode-block" id="enable_server_reflection"><a class="viewcode-back" href="../../../grpc_reflection.html#grpc_reflection.v1alpha.reflection.enable_server_reflection">[docs]</a><span class="k">def</span> <span class="nf">enable_server_reflection</span><span class="p">(</span><span class="n">service_names</span><span class="p">,</span> <span class="n">server</span><span class="p">,</span> <span class="n">pool</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Enables server reflection on a server.</span>
+<span class="n">_enable_server_reflection_doc</span> <span class="o">=</span> <span class="s2">&quot;&quot;&quot;Enables server reflection on a server.</span>
 
-<span class="sd">    Args:</span>
-<span class="sd">      service_names: Iterable of fully-qualified service names available.</span>
-<span class="sd">      server: grpc.Server to which reflection service will be added.</span>
-<span class="sd">      pool: DescriptorPool object to use (descriptor_pool.Default() if None).</span>
-<span class="sd">    &quot;&quot;&quot;</span>
-    <span class="n">_reflection_pb2_grpc</span><span class="o">.</span><span class="n">add_ServerReflectionServicer_to_server</span><span class="p">(</span>
-        <span class="n">ReflectionServicer</span><span class="p">(</span><span class="n">service_names</span><span class="p">,</span> <span class="n">pool</span><span class="o">=</span><span class="n">pool</span><span class="p">),</span> <span class="n">server</span><span class="p">)</span></div>
+<span class="s2">Args:</span>
+<span class="s2">    service_names: Iterable of fully-qualified service names available.</span>
+<span class="s2">    server: grpc.Server to which reflection service will be added.</span>
+<span class="s2">    pool: DescriptorPool object to use (descriptor_pool.Default() if None).</span>
+<span class="s2">&quot;&quot;&quot;</span>
+
+<span class="k">if</span> <span class="n">sys</span><span class="o">.</span><span class="n">version_info</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">&gt;=</span> <span class="mi">3</span> <span class="ow">and</span> <span class="n">sys</span><span class="o">.</span><span class="n">version_info</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">&gt;=</span> <span class="mi">6</span><span class="p">:</span>
+    <span class="c1"># Exposes AsyncReflectionServicer as public API.</span>
+    <span class="kn">from</span> <span class="nn">.</span> <span class="kn">import</span> <span class="n">_async</span> <span class="k">as</span> <span class="n">aio</span>
+    <span class="kn">from</span> <span class="nn">grpc.experimental</span> <span class="kn">import</span> <span class="n">aio</span> <span class="k">as</span> <span class="n">grpc_aio</span>  <span class="c1"># pylint: disable=ungrouped-imports</span>
+
+    <span class="k">def</span> <span class="nf">enable_server_reflection</span><span class="p">(</span><span class="n">service_names</span><span class="p">,</span> <span class="n">server</span><span class="p">,</span> <span class="n">pool</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">server</span><span class="p">,</span> <span class="n">grpc_aio</span><span class="o">.</span><span class="n">Server</span><span class="p">):</span>
+            <span class="n">_reflection_pb2_grpc</span><span class="o">.</span><span class="n">add_ServerReflectionServicer_to_server</span><span class="p">(</span>
+                <span class="n">aio</span><span class="o">.</span><span class="n">ReflectionServicer</span><span class="p">(</span><span class="n">service_names</span><span class="p">,</span> <span class="n">pool</span><span class="o">=</span><span class="n">pool</span><span class="p">),</span> <span class="n">server</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">_reflection_pb2_grpc</span><span class="o">.</span><span class="n">add_ServerReflectionServicer_to_server</span><span class="p">(</span>
+                <span class="n">ReflectionServicer</span><span class="p">(</span><span class="n">service_names</span><span class="p">,</span> <span class="n">pool</span><span class="o">=</span><span class="n">pool</span><span class="p">),</span> <span class="n">server</span><span class="p">)</span>
+
+    <span class="n">enable_server_reflection</span><span class="o">.</span><span class="vm">__doc__</span> <span class="o">=</span> <span class="n">_enable_server_reflection_doc</span>
+
+    <span class="n">__all__</span> <span class="o">=</span> <span class="p">[</span>
+        <span class="s2">&quot;SERVICE_NAME&quot;</span><span class="p">,</span>
+        <span class="s2">&quot;ReflectionServicer&quot;</span><span class="p">,</span>
+        <span class="s2">&quot;enable_server_reflection&quot;</span><span class="p">,</span>
+        <span class="s2">&quot;aio&quot;</span><span class="p">,</span>
+    <span class="p">]</span>
+<span class="k">else</span><span class="p">:</span>
+
+<div class="viewcode-block" id="enable_server_reflection"><a class="viewcode-back" href="../../../grpc_reflection.html#grpc_reflection.v1alpha.reflection.enable_server_reflection">[docs]</a>    <span class="k">def</span> <span class="nf">enable_server_reflection</span><span class="p">(</span><span class="n">service_names</span><span class="p">,</span> <span class="n">server</span><span class="p">,</span> <span class="n">pool</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
+        <span class="n">_reflection_pb2_grpc</span><span class="o">.</span><span class="n">add_ServerReflectionServicer_to_server</span><span class="p">(</span>
+            <span class="n">ReflectionServicer</span><span class="p">(</span><span class="n">service_names</span><span class="p">,</span> <span class="n">pool</span><span class="o">=</span><span class="n">pool</span><span class="p">),</span> <span class="n">server</span><span class="p">)</span></div>
+
+    <span class="n">enable_server_reflection</span><span class="o">.</span><span class="vm">__doc__</span> <span class="o">=</span> <span class="n">_enable_server_reflection_doc</span>
+
+    <span class="n">__all__</span> <span class="o">=</span> <span class="p">[</span>
+        <span class="s2">&quot;SERVICE_NAME&quot;</span><span class="p">,</span>
+        <span class="s2">&quot;ReflectionServicer&quot;</span><span class="p">,</span>
+        <span class="s2">&quot;enable_server_reflection&quot;</span><span class="p">,</span>
+    <span class="p">]</span>
 </pre></div>
 
           </div>
@@ -239,7 +193,7 @@
     <div class="clearer"></div>
   </div>
     <div class="footer">
-      &copy;2018, The gRPC Authors.
+      &copy;2020, The gRPC Authors.
       
     </div>
 

+ 20 - 19
python/_modules/grpc_status/rpc_status.html

@@ -4,7 +4,8 @@
 <html lang="en">
   <head>
     <meta charset="utf-8" />
-    <title>grpc_status.rpc_status &#8212; gRPC Python 1.29.0 documentation</title>
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>grpc_status.rpc_status &#8212; 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>
 
 
 
@@ -101,14 +102,12 @@
 <span class="sd">&quot;&quot;&quot;Reference implementation for status mapping in gRPC Python.&quot;&quot;&quot;</span>
 
 <span class="kn">import</span> <span class="nn">collections</span>
+<span class="kn">import</span> <span class="nn">sys</span>
 
 <span class="kn">import</span> <span class="nn">grpc</span>
 
 <span class="kn">from</span> <span class="nn">google.rpc</span> <span class="kn">import</span> <span class="n">status_pb2</span>
-
-<span class="n">_CODE_TO_GRPC_CODE_MAPPING</span> <span class="o">=</span> <span class="p">{</span><span class="n">x</span><span class="o">.</span><span class="n">value</span><span class="p">[</span><span class="mi">0</span><span class="p">]:</span> <span class="n">x</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">grpc</span><span class="o">.</span><span class="n">StatusCode</span><span class="p">}</span>
-
-<span class="n">_GRPC_DETAILS_METADATA_KEY</span> <span class="o">=</span> <span class="s1">&#39;grpc-status-details-bin&#39;</span>
+<span class="kn">from</span> <span class="nn">._common</span> <span class="kn">import</span> <span class="n">code_to_grpc_status_code</span><span class="p">,</span> <span class="n">GRPC_DETAILS_METADATA_KEY</span>
 
 
 <span class="k">class</span> <span class="nc">_Status</span><span class="p">(</span>
@@ -118,13 +117,6 @@
     <span class="k">pass</span>
 
 
-<span class="k">def</span> <span class="nf">_code_to_grpc_status_code</span><span class="p">(</span><span class="n">code</span><span class="p">):</span>
-    <span class="k">try</span><span class="p">:</span>
-        <span class="k">return</span> <span class="n">_CODE_TO_GRPC_CODE_MAPPING</span><span class="p">[</span><span class="n">code</span><span class="p">]</span>
-    <span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
-        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">&#39;Invalid status code </span><span class="si">%s</span><span class="s1">&#39;</span> <span class="o">%</span> <span class="n">code</span><span class="p">)</span>
-
-
 <div class="viewcode-block" id="from_call"><a class="viewcode-back" href="../../grpc_status.html#grpc_status.rpc_status.from_call">[docs]</a><span class="k">def</span> <span class="nf">from_call</span><span class="p">(</span><span class="n">call</span><span class="p">):</span>
     <span class="sd">&quot;&quot;&quot;Returns a google.rpc.status.Status message corresponding to a given grpc.Call.</span>
 
@@ -143,13 +135,12 @@
     <span class="k">if</span> <span class="n">call</span><span class="o">.</span><span class="n">trailing_metadata</span><span class="p">()</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
         <span class="k">return</span> <span class="kc">None</span>
     <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">call</span><span class="o">.</span><span class="n">trailing_metadata</span><span class="p">():</span>
-        <span class="k">if</span> <span class="n">key</span> <span class="o">==</span> <span class="n">_GRPC_DETAILS_METADATA_KEY</span><span class="p">:</span>
+        <span class="k">if</span> <span class="n">key</span> <span class="o">==</span> <span class="n">GRPC_DETAILS_METADATA_KEY</span><span class="p">:</span>
             <span class="n">rich_status</span> <span class="o">=</span> <span class="n">status_pb2</span><span class="o">.</span><span class="n">Status</span><span class="o">.</span><span class="n">FromString</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
             <span class="k">if</span> <span class="n">call</span><span class="o">.</span><span class="n">code</span><span class="p">()</span><span class="o">.</span><span class="n">value</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">!=</span> <span class="n">rich_status</span><span class="o">.</span><span class="n">code</span><span class="p">:</span>
                 <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
                     <span class="s1">&#39;Code in Status proto (</span><span class="si">%s</span><span class="s1">) doesn</span><span class="se">\&#39;</span><span class="s1">t match status code (</span><span class="si">%s</span><span class="s1">)&#39;</span>
-                    <span class="o">%</span>
-                    <span class="p">(</span><span class="n">_code_to_grpc_status_code</span><span class="p">(</span><span class="n">rich_status</span><span class="o">.</span><span class="n">code</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="o">%</span> <span class="p">(</span><span class="n">code_to_grpc_status_code</span><span class="p">(</span><span class="n">rich_status</span><span class="o">.</span><span class="n">code</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="k">if</span> <span class="n">call</span><span class="o">.</span><span class="n">details</span><span class="p">()</span> <span class="o">!=</span> <span class="n">rich_status</span><span class="o">.</span><span class="n">message</span><span class="p">:</span>
                 <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
                     <span class="s1">&#39;Message in Status proto (</span><span class="si">%s</span><span class="s1">) doesn</span><span class="se">\&#39;</span><span class="s1">t match status details (</span><span class="si">%s</span><span class="s1">)&#39;</span>
@@ -170,10 +161,20 @@
 <span class="sd">    Returns:</span>
 <span class="sd">      A grpc.Status instance representing the input google.rpc.status.Status message.</span>
 <span class="sd">    &quot;&quot;&quot;</span>
-    <span class="k">return</span> <span class="n">_Status</span><span class="p">(</span><span class="n">code</span><span class="o">=</span><span class="n">_code_to_grpc_status_code</span><span class="p">(</span><span class="n">status</span><span class="o">.</span><span class="n">code</span><span class="p">),</span>
+    <span class="k">return</span> <span class="n">_Status</span><span class="p">(</span><span class="n">code</span><span class="o">=</span><span class="n">code_to_grpc_status_code</span><span class="p">(</span><span class="n">status</span><span class="o">.</span><span class="n">code</span><span class="p">),</span>
                    <span class="n">details</span><span class="o">=</span><span class="n">status</span><span class="o">.</span><span class="n">message</span><span class="p">,</span>
-                   <span class="n">trailing_metadata</span><span class="o">=</span><span class="p">((</span><span class="n">_GRPC_DETAILS_METADATA_KEY</span><span class="p">,</span>
+                   <span class="n">trailing_metadata</span><span class="o">=</span><span class="p">((</span><span class="n">GRPC_DETAILS_METADATA_KEY</span><span class="p">,</span>
                                        <span class="n">status</span><span class="o">.</span><span class="n">SerializeToString</span><span class="p">()),))</span></div>
+
+
+<span class="n">__all__</span> <span class="o">=</span> <span class="p">[</span>
+    <span class="s1">&#39;from_call&#39;</span><span class="p">,</span>
+    <span class="s1">&#39;to_status&#39;</span><span class="p">,</span>
+<span class="p">]</span>
+
+<span class="k">if</span> <span class="n">sys</span><span class="o">.</span><span class="n">version_info</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">&gt;=</span> <span class="mi">3</span> <span class="ow">and</span> <span class="n">sys</span><span class="o">.</span><span class="n">version_info</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">&gt;=</span> <span class="mi">6</span><span class="p">:</span>
+    <span class="kn">from</span> <span class="nn">.</span> <span class="kn">import</span> <span class="n">_async</span> <span class="k">as</span> <span class="n">aio</span>  <span class="c1"># pylint: disable=unused-import</span>
+    <span class="n">__all__</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">&#39;aio&#39;</span><span class="p">)</span>
 </pre></div>
 
           </div>
@@ -183,7 +184,7 @@
     <div class="clearer"></div>
   </div>
     <div class="footer">
-      &copy;2018, The gRPC Authors.
+      &copy;2020, The gRPC Authors.
       
     </div>
 

+ 4 - 3
python/_modules/grpc_testing.html

@@ -4,7 +4,8 @@
 <html lang="en">
   <head>
     <meta charset="utf-8" />
-    <title>grpc_testing &#8212; gRPC Python 1.29.0 documentation</title>
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>grpc_testing &#8212; 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>
 
 
 
@@ -791,7 +792,7 @@
     <div class="clearer"></div>
   </div>
     <div class="footer">
-      &copy;2018, The gRPC Authors.
+      &copy;2020, The gRPC Authors.
       
     </div>
 

+ 6 - 4
python/_modules/index.html

@@ -4,7 +4,8 @@
 <html lang="en">
   <head>
     <meta charset="utf-8" />
-    <title>Overview: module code &#8212; gRPC Python 1.29.0 documentation</title>
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>Overview: module code &#8212; 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>
 
 
 
@@ -92,7 +93,8 @@
 <li><a href="grpc/experimental/aio/_channel.html">grpc.experimental.aio._channel</a></li>
 <li><a href="grpc/experimental/aio/_interceptor.html">grpc.experimental.aio._interceptor</a></li>
 <li><a href="grpc/experimental/aio/_server.html">grpc.experimental.aio._server</a></li>
-</ul><li><a href="grpc_channelz/v1/channelz.html">grpc_channelz.v1.channelz</a></li>
+</ul><li><a href="grpc_channelz/v1/_servicer.html">grpc_channelz.v1._servicer</a></li>
+<li><a href="grpc_channelz/v1/channelz.html">grpc_channelz.v1.channelz</a></li>
 <li><a href="grpc_health/v1/health.html">grpc_health.v1.health</a></li>
 <li><a href="grpc_reflection/v1alpha/reflection.html">grpc_reflection.v1alpha.reflection</a></li>
 <li><a href="grpc_status/rpc_status.html">grpc_status.rpc_status</a></li>
@@ -106,7 +108,7 @@
     <div class="clearer"></div>
   </div>
     <div class="footer">
-      &copy;2018, The gRPC Authors.
+      &copy;2020, The gRPC Authors.
       
     </div>
 

+ 21 - 0
python/_sources/glossary.rst.txt

@@ -27,3 +27,24 @@ Glossary
     the returned object doesn't have restrictions (i.e. ``None`` allowed). The
     deserializer is invoked with inbound message bytes on both the server side
     and the client-side.
+
+  wait_for_ready
+    If an RPC is issued but the channel is in the TRANSIENT_FAILURE or SHUTDOWN
+    states, the library cannot transmit the RPC at the moment. By default, the
+    gRPC library will fail such RPCs immediately. This is known as "fail fast."
+    RPCs will not fail as a result of the channel being in other states
+    (CONNECTING, READY, or IDLE).
+
+    When the wait_for_ready option is specified, the library will queue RPCs
+    until the channel is READY. Any submitted RPCs may still fail before the
+    READY state is reached for other reasons, e.g., the client channel has been
+    shut down or the RPC's deadline has been reached.
+
+  channel_arguments
+    A list of key-value pairs to configure the underlying gRPC Core channel or
+    server object. Channel arguments are meant for advanced usages and contain
+    experimental API (some may not labeled as experimental). Full list of
+    available channel arguments and documentation can be found under the
+    "grpc_arg_keys" section of "grpc_types.h" header file (|grpc_types_link|).
+    For example, if you want to disable TCP port reuse, you may construct
+    channel arguments like: ``options = (('grpc.so_reuseport', 0),)``.

+ 2 - 2
python/_sources/grpc.rst.txt

@@ -6,8 +6,8 @@ gRPC
 Tutorial
 --------
 
-If you want to see gRPC in action first, visit the `Python Quickstart <https://grpc.io/docs/quickstart/python.html>`_.
-Or, if you would like dive in with more extensive usage of gRPC Python, check `gRPC Basics - Python <https://grpc.io/docs/tutorials/basic/python.html>`_ out.
+If you want to see gRPC in action first, visit the `Python Quickstart <https://grpc.io/docs/languages/python/quickstart>`_.
+Or, if you would like dive in with more extensive usage of gRPC Python, check `gRPC Basics - Python <https://grpc.io/docs/languages/python/basics>`_ out.
 
 
 Example

+ 7 - 18
python/_sources/grpc_asyncio.rst.txt

@@ -24,27 +24,16 @@ gRPC Async API objects may only be used on the thread on which they were
 created. AsyncIO doesn't provide thread safety for most of its APIs.
 
 
-Module Contents
----------------
-
-Enable AsyncIO in gRPC
-^^^^^^^^^^^^^^^^^^^^^^
-
-.. function:: init_grpc_aio
+Blocking Code in AsyncIO
+------------------------
 
-    Enable AsyncIO for gRPC Python.
+Making blocking function calls in coroutines or in the thread running event
+loop will block the event loop, potentially starving all RPCs in the process.
+Refer to the Python language documentation on AsyncIO for more details (`running-blocking-code <https://docs.python.org/3/library/asyncio-dev.html#running-blocking-code>`_).
 
-    This function is idempotent and it should be invoked before creation of
-    AsyncIO stack objects. Otherwise, the application might deadlock.
 
-    This function configurates the gRPC C-Core to invoke AsyncIO methods for IO
-    operations (e.g., socket read, write). The configuration applies to the
-    entire process.
-
-    After invoking this function, making blocking function calls in coroutines
-    or in the thread running event loop will block the event loop, potentially
-    starving all RPCs in the process. Refer to the Python language
-    documentation on AsyncIO for more details (`running-blocking-code <https://docs.python.org/3/library/asyncio-dev.html#running-blocking-code>`_).
+Module Contents
+---------------
 
 
 Create Channel

+ 114 - 27
python/_static/basic.css

@@ -15,6 +15,12 @@ div.clearer {
     clear: both;
 }
 
+div.section::after {
+    display: block;
+    content: '';
+    clear: left;
+}
+
 /* -- relbar ---------------------------------------------------------------- */
 
 div.related {
@@ -316,21 +322,27 @@ img.align-default, .figure.align-default {
 div.sidebar {
     margin: 0 0 0.5em 1em;
     border: 1px solid #ddb;
-    padding: 7px 7px 0 7px;
+    padding: 7px;
     background-color: #ffe;
     width: 40%;
     float: right;
+    clear: right;
+    overflow-x: auto;
 }
 
 p.sidebar-title {
     font-weight: bold;
 }
 
+div.admonition, div.topic, blockquote {
+    clear: left;
+}
+
 /* -- topics ---------------------------------------------------------------- */
 
 div.topic {
     border: 1px solid #ccc;
-    padding: 7px 7px 0 7px;
+    padding: 7px;
     margin: 10px 0 10px 0;
 }
 
@@ -352,10 +364,6 @@ div.admonition dt {
     font-weight: bold;
 }
 
-div.admonition dl {
-    margin-bottom: 0;
-}
-
 p.admonition-title {
     margin: 0px 10px 5px 0px;
     font-weight: bold;
@@ -366,9 +374,28 @@ div.body p.centered {
     margin-top: 25px;
 }
 
+/* -- content of sidebars/topics/admonitions -------------------------------- */
+
+div.sidebar > :last-child,
+div.topic > :last-child,
+div.admonition > :last-child {
+    margin-bottom: 0;
+}
+
+div.sidebar::after,
+div.topic::after,
+div.admonition::after,
+blockquote::after {
+    display: block;
+    content: '';
+    clear: both;
+}
+
 /* -- tables ---------------------------------------------------------------- */
 
 table.docutils {
+    margin-top: 10px;
+    margin-bottom: 10px;
     border: 0;
     border-collapse: collapse;
 }
@@ -416,13 +443,13 @@ table.citation td {
     border-bottom: none;
 }
 
-th > p:first-child,
-td > p:first-child {
+th > :first-child,
+td > :first-child {
     margin-top: 0px;
 }
 
-th > p:last-child,
-td > p:last-child {
+th > :last-child,
+td > :last-child {
     margin-bottom: 0px;
 }
 
@@ -468,6 +495,10 @@ table.field-list td, table.field-list th {
 
 /* -- hlist styles ---------------------------------------------------------- */
 
+table.hlist {
+    margin: 1em 0;
+}
+
 table.hlist td {
     vertical-align: top;
 }
@@ -495,17 +526,37 @@ ol.upperroman {
     list-style: upper-roman;
 }
 
-li > p:first-child {
+:not(li) > ol > li:first-child > :first-child,
+:not(li) > ul > li:first-child > :first-child {
     margin-top: 0px;
 }
 
-li > p:last-child {
+:not(li) > ol > li:last-child > :last-child,
+:not(li) > ul > li:last-child > :last-child {
     margin-bottom: 0px;
 }
 
+ol.simple ol p,
+ol.simple ul p,
+ul.simple ol p,
+ul.simple ul p {
+    margin-top: 0;
+}
+
+ol.simple > li:not(:first-child) > p,
+ul.simple > li:not(:first-child) > p {
+    margin-top: 0;
+}
+
+ol.simple p,
+ul.simple p {
+    margin-bottom: 0;
+}
+
 dl.footnote > dt,
 dl.citation > dt {
     float: left;
+    margin-right: 0.5em;
 }
 
 dl.footnote > dd,
@@ -546,7 +597,7 @@ dl {
     margin-bottom: 15px;
 }
 
-dd > p:first-child {
+dd > :first-child {
     margin-top: 0px;
 }
 
@@ -560,6 +611,11 @@ dd {
     margin-left: 30px;
 }
 
+dl > dd:last-child,
+dl > dd:last-child > :last-child {
+    margin-bottom: 0;
+}
+
 dt:target, span.highlighted {
     background-color: #fbe54e;
 }
@@ -637,6 +693,10 @@ pre {
     overflow-y: hidden;  /* fixes display issues on Chrome browsers */
 }
 
+pre, div[class|="highlight"] {
+    clear: both;
+}
+
 span.pre {
     -moz-hyphens: none;
     -ms-hyphens: none;
@@ -644,22 +704,57 @@ span.pre {
     hyphens: none;
 }
 
+div[class^="highlight-"] {
+    margin: 1em 0;
+}
+
 td.linenos pre {
-    padding: 5px 0px;
     border: 0;
     background-color: transparent;
     color: #aaa;
 }
 
 table.highlighttable {
-    margin-left: 0.5em;
+    display: block;
+}
+
+table.highlighttable tbody {
+    display: block;
+}
+
+table.highlighttable tr {
+    display: flex;
 }
 
 table.highlighttable td {
-    padding: 0 0.5em 0 0.5em;
+    margin: 0;
+    padding: 0;
+}
+
+table.highlighttable td.linenos {
+    padding-right: 0.5em;
+}
+
+table.highlighttable td.code {
+    flex: 1;
+    overflow: hidden;
+}
+
+.highlight .hll {
+    display: block;
+}
+
+div.highlight pre,
+table.highlighttable pre {
+    margin: 0;
+}
+
+div.code-block-caption + div {
+    margin-top: 0;
 }
 
 div.code-block-caption {
+    margin-top: 1em;
     padding: 2px 5px;
     font-size: small;
 }
@@ -668,10 +763,7 @@ div.code-block-caption code {
     background-color: transparent;
 }
 
-div.code-block-caption + div > div.highlight > pre {
-    margin-top: 0;
-}
-
+table.highlighttable td.linenos,
 div.doctest > div.highlight span.gp {  /* gp: Generic.Prompt */
     user-select: none;
 }
@@ -685,11 +777,7 @@ div.code-block-caption span.caption-text {
 }
 
 div.literal-block-wrapper {
-    padding: 1em 1em 0;
-}
-
-div.literal-block-wrapper div.highlight {
-    margin: 0;
+    margin: 1em 0;
 }
 
 code.descname {
@@ -740,8 +828,7 @@ span.eqno {
 }
 
 span.eqno a.headerlink {
-    position: relative;
-    left: 0px;
+    position: absolute;
     z-index: 1;
 }
 

+ 1 - 1
python/_static/documentation_options.js

@@ -1,6 +1,6 @@
 var DOCUMENTATION_OPTIONS = {
     URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'),
-    VERSION: '1.29.0',
+    VERSION: '1.31.0',
     LANGUAGE: 'en',
     COLLAPSE_INDEX: false,
     BUILDER: 'html',

Разница между файлами не показана из-за своего большого размера
+ 265 - 157
python/_static/jquery-3.5.1.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 1
python/_static/jquery.js


+ 37 - 37
python/genindex.html

@@ -1,11 +1,11 @@
 
-
 <!DOCTYPE html>
 
 <html lang="en">
   <head>
     <meta charset="utf-8" />
-    <title>Index &#8212; gRPC Python 1.29.0 documentation</title>
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>Index &#8212; 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>
@@ -30,7 +30,7 @@
 
 
 
-<p class="blurb">1.29.0</p>
+<p class="blurb">1.31.0</p>
 
 
 
@@ -180,22 +180,20 @@
 </li>
       <li><a href="grpc_channelz.html#grpc_channelz.v1.channelz.add_channelz_servicer">add_channelz_servicer() (in module grpc_channelz.v1.channelz)</a>
 </li>
-      <li><a href="grpc_asyncio.html#grpc.experimental.aio.InterceptedUnaryUnaryCall.add_done_callback">add_done_callback() (grpc.experimental.aio.InterceptedUnaryUnaryCall method)</a>
+      <li><a href="grpc_asyncio.html#grpc.experimental.aio.RpcContext.add_done_callback">add_done_callback() (grpc.experimental.aio.RpcContext method)</a>
 
       <ul>
-        <li><a href="grpc_asyncio.html#grpc.experimental.aio.RpcContext.add_done_callback">(grpc.experimental.aio.RpcContext method)</a>
-</li>
         <li><a href="grpc.html#grpc.Future.add_done_callback">(grpc.Future method)</a>
 </li>
       </ul></li>
-  </ul></td>
-  <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="grpc_asyncio.html#grpc.experimental.aio.Server.add_generic_rpc_handlers">add_generic_rpc_handlers() (grpc.experimental.aio.Server method)</a>
 
       <ul>
         <li><a href="grpc.html#grpc.Server.add_generic_rpc_handlers">(grpc.Server method)</a>
 </li>
       </ul></li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="grpc_asyncio.html#grpc.experimental.aio.Server.add_insecure_port">add_insecure_port() (grpc.experimental.aio.Server method)</a>
 
       <ul>
@@ -212,8 +210,12 @@
 </li>
       <li><a href="grpc.html#grpc.StatusCode.ALREADY_EXISTS">ALREADY_EXISTS (grpc.StatusCode attribute)</a>
 </li>
-      <li><a href="grpc.html#grpc.ServicerContext.auth_context">auth_context() (grpc.ServicerContext method)</a>
+      <li><a href="grpc_asyncio.html#grpc.experimental.aio.ServicerContext.auth_context">auth_context() (grpc.experimental.aio.ServicerContext method)</a>
+
+      <ul>
+        <li><a href="grpc.html#grpc.ServicerContext.auth_context">(grpc.ServicerContext method)</a>
 </li>
+      </ul></li>
       <li><a href="grpc.html#grpc.AuthMetadataContext">AuthMetadataContext (class in grpc)</a>
 </li>
       <li><a href="grpc.html#grpc.AuthMetadataPlugin">AuthMetadataPlugin (class in grpc)</a>
@@ -246,11 +248,9 @@
 </li>
       <li><a href="grpc.html#grpc.CallCredentials">CallCredentials (class in grpc)</a>
 </li>
-      <li><a href="grpc_asyncio.html#grpc.experimental.aio.InterceptedUnaryUnaryCall.cancel">cancel() (grpc.experimental.aio.InterceptedUnaryUnaryCall method)</a>
+      <li><a href="grpc_asyncio.html#grpc.experimental.aio.RpcContext.cancel">cancel() (grpc.experimental.aio.RpcContext method)</a>
 
       <ul>
-        <li><a href="grpc_asyncio.html#grpc.experimental.aio.RpcContext.cancel">(grpc.experimental.aio.RpcContext method)</a>
-</li>
         <li><a href="grpc.html#grpc.Future.cancel">(grpc.Future method)</a>
 </li>
         <li><a href="grpc.html#grpc.RpcContext.cancel">(grpc.RpcContext method)</a>
@@ -266,11 +266,9 @@
       </ul></li>
       <li><a href="grpc.html#grpc.StatusCode.CANCELLED">CANCELLED (grpc.StatusCode attribute)</a>
 </li>
-      <li><a href="grpc_asyncio.html#grpc.experimental.aio.InterceptedUnaryUnaryCall.cancelled">cancelled() (grpc.experimental.aio.InterceptedUnaryUnaryCall method)</a>
+      <li><a href="grpc_asyncio.html#grpc.experimental.aio.RpcContext.cancelled">cancelled() (grpc.experimental.aio.RpcContext method)</a>
 
       <ul>
-        <li><a href="grpc_asyncio.html#grpc.experimental.aio.RpcContext.cancelled">(grpc.experimental.aio.RpcContext method)</a>
-</li>
         <li><a href="grpc.html#grpc.Future.cancelled">(grpc.Future method)</a>
 </li>
         <li><a href="grpc_testing.html#grpc_testing.StreamStreamChannelRpc.cancelled">(grpc_testing.StreamStreamChannelRpc method)</a>
@@ -293,6 +291,8 @@
   </ul></td>
   <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="grpc_testing.html#grpc_testing.channel">channel() (in module grpc_testing)</a>
+</li>
+      <li><a href="glossary.html#term-channel_arguments"><strong>channel_arguments</strong></a>
 </li>
       <li><a href="grpc_asyncio.html#grpc.experimental.aio.Channel.channel_ready">channel_ready() (grpc.experimental.aio.Channel method)</a>
 </li>
@@ -324,8 +324,6 @@
         <li><a href="grpc_asyncio.html#grpc.experimental.aio.AioRpcError.code">(grpc.experimental.aio.AioRpcError method)</a>
 </li>
         <li><a href="grpc_asyncio.html#grpc.experimental.aio.Call.code">(grpc.experimental.aio.Call method)</a>
-</li>
-        <li><a href="grpc_asyncio.html#grpc.experimental.aio.InterceptedUnaryUnaryCall.code">(grpc.experimental.aio.InterceptedUnaryUnaryCall method)</a>
 </li>
       </ul></li>
       <li><a href="grpc.html#grpc.composite_call_credentials">composite_call_credentials() (in module grpc)</a>
@@ -362,8 +360,6 @@
         <li><a href="grpc_asyncio.html#grpc.experimental.aio.AioRpcError.details">(grpc.experimental.aio.AioRpcError method)</a>
 </li>
         <li><a href="grpc_asyncio.html#grpc.experimental.aio.Call.details">(grpc.experimental.aio.Call method)</a>
-</li>
-        <li><a href="grpc_asyncio.html#grpc.experimental.aio.InterceptedUnaryUnaryCall.details">(grpc.experimental.aio.InterceptedUnaryUnaryCall method)</a>
 </li>
       </ul></li>
   </ul></td>
@@ -374,11 +370,9 @@
         <li><a href="grpc.html#grpc.ServicerContext.disable_next_message_compression">(grpc.ServicerContext method)</a>
 </li>
       </ul></li>
-      <li><a href="grpc_asyncio.html#grpc.experimental.aio.InterceptedUnaryUnaryCall.done">done() (grpc.experimental.aio.InterceptedUnaryUnaryCall method)</a>
+      <li><a href="grpc_asyncio.html#grpc.experimental.aio.RpcContext.done">done() (grpc.experimental.aio.RpcContext method)</a>
 
       <ul>
-        <li><a href="grpc_asyncio.html#grpc.experimental.aio.RpcContext.done">(grpc.experimental.aio.RpcContext method)</a>
-</li>
         <li><a href="grpc.html#grpc.Future.done">(grpc.Future method)</a>
 </li>
       </ul></li>
@@ -517,8 +511,6 @@
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="grpc.html#grpc.ChannelConnectivity.IDLE">IDLE (grpc.ChannelConnectivity attribute)</a>
-</li>
-      <li><a href="grpc_asyncio.html#grpc.experimental.aio.init_grpc_aio">init_grpc_aio() (in module grpc.experimental.aio)</a>
 </li>
       <li><a href="grpc.html#grpc.Call.initial_metadata">initial_metadata() (grpc.Call method)</a>
 
@@ -526,8 +518,6 @@
         <li><a href="grpc_asyncio.html#grpc.experimental.aio.AioRpcError.initial_metadata">(grpc.experimental.aio.AioRpcError method)</a>
 </li>
         <li><a href="grpc_asyncio.html#grpc.experimental.aio.Call.initial_metadata">(grpc.experimental.aio.Call method)</a>
-</li>
-        <li><a href="grpc_asyncio.html#grpc.experimental.aio.InterceptedUnaryUnaryCall.initial_metadata">(grpc.experimental.aio.InterceptedUnaryUnaryCall method)</a>
 </li>
         <li><a href="grpc_testing.html#grpc_testing.StreamStreamServerRpc.initial_metadata">(grpc_testing.StreamStreamServerRpc method)</a>
 </li>
@@ -550,10 +540,10 @@
 </li>
       <li><a href="grpc.html#grpc.StreamStreamClientInterceptor.intercept_stream_stream">intercept_stream_stream() (grpc.StreamStreamClientInterceptor method)</a>
 </li>
-  </ul></td>
-  <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="grpc.html#grpc.StreamUnaryClientInterceptor.intercept_stream_unary">intercept_stream_unary() (grpc.StreamUnaryClientInterceptor method)</a>
 </li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="grpc.html#grpc.UnaryStreamClientInterceptor.intercept_unary_stream">intercept_unary_stream() (grpc.UnaryStreamClientInterceptor method)</a>
 </li>
       <li><a href="grpc_asyncio.html#grpc.experimental.aio.UnaryUnaryClientInterceptor.intercept_unary_unary">intercept_unary_unary() (grpc.experimental.aio.UnaryUnaryClientInterceptor method)</a>
@@ -675,14 +665,26 @@
 <h2 id="P">P</h2>
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%; vertical-align: top;"><ul>
-      <li><a href="grpc.html#grpc.ServicerContext.peer">peer() (grpc.ServicerContext method)</a>
+      <li><a href="grpc_asyncio.html#grpc.experimental.aio.ServicerContext.peer">peer() (grpc.experimental.aio.ServicerContext method)</a>
+
+      <ul>
+        <li><a href="grpc.html#grpc.ServicerContext.peer">(grpc.ServicerContext method)</a>
 </li>
-      <li><a href="grpc.html#grpc.ServicerContext.peer_identities">peer_identities() (grpc.ServicerContext method)</a>
+      </ul></li>
+      <li><a href="grpc_asyncio.html#grpc.experimental.aio.ServicerContext.peer_identities">peer_identities() (grpc.experimental.aio.ServicerContext method)</a>
+
+      <ul>
+        <li><a href="grpc.html#grpc.ServicerContext.peer_identities">(grpc.ServicerContext method)</a>
 </li>
+      </ul></li>
   </ul></td>
   <td style="width: 33%; vertical-align: top;"><ul>
-      <li><a href="grpc.html#grpc.ServicerContext.peer_identity_key">peer_identity_key() (grpc.ServicerContext method)</a>
+      <li><a href="grpc_asyncio.html#grpc.experimental.aio.ServicerContext.peer_identity_key">peer_identity_key() (grpc.experimental.aio.ServicerContext method)</a>
+
+      <ul>
+        <li><a href="grpc.html#grpc.ServicerContext.peer_identity_key">(grpc.ServicerContext method)</a>
 </li>
+      </ul></li>
       <li><a href="grpc.html#grpc.StatusCode.PERMISSION_DENIED">PERMISSION_DENIED (grpc.StatusCode attribute)</a>
 </li>
   </ul></td>
@@ -997,8 +999,6 @@
         <li><a href="grpc_asyncio.html#grpc.experimental.aio.AioRpcError.trailing_metadata">(grpc.experimental.aio.AioRpcError method)</a>
 </li>
         <li><a href="grpc_asyncio.html#grpc.experimental.aio.Call.trailing_metadata">(grpc.experimental.aio.Call method)</a>
-</li>
-        <li><a href="grpc_asyncio.html#grpc.experimental.aio.InterceptedUnaryUnaryCall.trailing_metadata">(grpc.experimental.aio.InterceptedUnaryUnaryCall method)</a>
 </li>
       </ul></li>
       <li><a href="grpc.html#grpc.ChannelConnectivity.TRANSIENT_FAILURE">TRANSIENT_FAILURE (grpc.ChannelConnectivity attribute)</a>
@@ -1084,13 +1084,13 @@
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="grpc_asyncio.html#grpc.experimental.aio.Call.wait_for_connection">wait_for_connection() (grpc.experimental.aio.Call method)</a>
+</li>
+      <li><a href="glossary.html#term-wait_for_ready"><strong>wait_for_ready</strong></a>
 
       <ul>
-        <li><a href="grpc_asyncio.html#grpc.experimental.aio.InterceptedUnaryUnaryCall.wait_for_connection">(grpc.experimental.aio.InterceptedUnaryUnaryCall method)</a>
+        <li><a href="grpc.html#grpc.ClientCallDetails.wait_for_ready">(grpc.ClientCallDetails attribute)</a>
 </li>
       </ul></li>
-      <li><a href="grpc.html#grpc.ClientCallDetails.wait_for_ready">wait_for_ready (grpc.ClientCallDetails attribute)</a>
-</li>
       <li><a href="grpc_asyncio.html#grpc.experimental.aio.Channel.wait_for_state_change">wait_for_state_change() (grpc.experimental.aio.Channel method)</a>
 </li>
       <li><a href="grpc_asyncio.html#grpc.experimental.aio.Server.wait_for_termination">wait_for_termination() (grpc.experimental.aio.Server method)</a>
@@ -1129,7 +1129,7 @@
     <div class="clearer"></div>
   </div>
     <div class="footer">
-      &copy;2018, The gRPC Authors.
+      &copy;2020, The gRPC Authors.
       
     </div>
 

+ 23 - 4
python/glossary.html

@@ -4,7 +4,8 @@
 <html lang="en">
   <head>
     <meta charset="utf-8" />
-    <title>Glossary &#8212; gRPC Python 1.29.0 documentation</title>
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>Glossary &#8212; 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>
@@ -30,7 +31,7 @@
 
 
 
-<p class="blurb">1.29.0</p>
+<p class="blurb">1.31.0</p>
 
 
 
@@ -86,7 +87,7 @@
             
   <div class="section" id="glossary">
 <h1>Glossary<a class="headerlink" href="#glossary" title="Permalink to this headline">¶</a></h1>
-<dl class="glossary simple">
+<dl class="glossary">
 <dt id="term-metadatum">metadatum</dt><dd><p>A key-value pair included in the HTTP header.  It is a
 2-tuple where the first entry is the key and the
 second is the value, i.e. (key, value).  The metadata key is an ASCII str,
@@ -108,6 +109,24 @@ the returned object doesn’t have restrictions (i.e. <code class="docutils lite
 deserializer is invoked with inbound message bytes on both the server side
 and the client-side.</p>
 </dd>
+<dt id="term-wait_for_ready">wait_for_ready</dt><dd><p>If an RPC is issued but the channel is in the TRANSIENT_FAILURE or SHUTDOWN
+states, the library cannot transmit the RPC at the moment. By default, the
+gRPC library will fail such RPCs immediately. This is known as “fail fast.”
+RPCs will not fail as a result of the channel being in other states
+(CONNECTING, READY, or IDLE).</p>
+<p>When the wait_for_ready option is specified, the library will queue RPCs
+until the channel is READY. Any submitted RPCs may still fail before the
+READY state is reached for other reasons, e.g., the client channel has been
+shut down or the RPC’s deadline has been reached.</p>
+</dd>
+<dt id="term-channel_arguments">channel_arguments</dt><dd><p>A list of key-value pairs to configure the underlying gRPC Core channel or
+server object. Channel arguments are meant for advanced usages and contain
+experimental API (some may not labeled as experimental). Full list of
+available channel arguments and documentation can be found under the
+“grpc_arg_keys” section of “grpc_types.h” header file (<a class="reference external" href="https://github.com/grpc/grpc/blob/v1.31.x/include/grpc/impl/codegen/grpc_types.h">https://github.com/grpc/grpc/blob/v1.31.x/include/grpc/impl/codegen/grpc_types.h</a>).
+For example, if you want to disable TCP port reuse, you may construct
+channel arguments like: <code class="docutils literal notranslate"><span class="pre">options</span> <span class="pre">=</span> <span class="pre">(('grpc.so_reuseport',</span> <span class="pre">0),)</span></code>.</p>
+</dd>
 </dl>
 </div>
 
@@ -119,7 +138,7 @@ and the client-side.</p>
     <div class="clearer"></div>
   </div>
     <div class="footer">
-      &copy;2018, The gRPC Authors.
+      &copy;2020, The gRPC Authors.
       
       |
       <a href="_sources/glossary.rst.txt"

+ 24 - 23
python/grpc.html

@@ -4,7 +4,8 @@
 <html lang="en">
   <head>
     <meta charset="utf-8" />
-    <title>gRPC &#8212; gRPC Python 1.29.0 documentation</title>
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>gRPC &#8212; 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>
@@ -31,7 +32,7 @@
 
 
 
-<p class="blurb">1.29.0</p>
+<p class="blurb">1.31.0</p>
 
 
 
@@ -120,8 +121,8 @@
 <span id="grpc"></span><h1>gRPC<a class="headerlink" href="#module-grpc" title="Permalink to this headline">¶</a></h1>
 <div class="section" id="tutorial">
 <h2>Tutorial<a class="headerlink" href="#tutorial" title="Permalink to this headline">¶</a></h2>
-<p>If you want to see gRPC in action first, visit the <a class="reference external" href="https://grpc.io/docs/quickstart/python.html">Python Quickstart</a>.
-Or, if you would like dive in with more extensive usage of gRPC Python, check <a class="reference external" href="https://grpc.io/docs/tutorials/basic/python.html">gRPC Basics - Python</a> out.</p>
+<p>If you want to see gRPC in action first, visit the <a class="reference external" href="https://grpc.io/docs/languages/python/quickstart">Python Quickstart</a>.
+Or, if you would like dive in with more extensive usage of gRPC Python, check <a class="reference external" href="https://grpc.io/docs/languages/python/basics">gRPC Basics - Python</a> out.</p>
 </div>
 <div class="section" id="example">
 <h2>Example<a class="headerlink" href="#example" title="Permalink to this headline">¶</a></h2>
@@ -144,7 +145,7 @@ Or, if you would like dive in with more extensive usage of gRPC Python, check <a
 <dt class="field-odd">Parameters</dt>
 <dd class="field-odd"><ul class="simple">
 <li><p><strong>target</strong> – The server address</p></li>
-<li><p><strong>options</strong> – An optional list of key-value pairs (channel args
+<li><p><strong>options</strong> – An optional list of key-value pairs (<a class="reference internal" href="glossary.html#term-channel_arguments"><span class="xref std std-term">channel_arguments</span></a>
 in gRPC Core runtime) to configure the channel.</p></li>
 <li><p><strong>compression</strong> – An optional value indicating the compression method to be
 used over the lifetime of the channel. This is an EXPERIMENTAL option.</p></li>
@@ -166,7 +167,7 @@ used over the lifetime of the channel. This is an EXPERIMENTAL option.</p></li>
 <dd class="field-odd"><ul class="simple">
 <li><p><strong>target</strong> – The server address.</p></li>
 <li><p><strong>credentials</strong> – A ChannelCredentials instance.</p></li>
-<li><p><strong>options</strong> – An optional list of key-value pairs (channel args
+<li><p><strong>options</strong> – An optional list of key-value pairs (<a class="reference internal" href="glossary.html#term-channel_arguments"><span class="xref std std-term">channel_arguments</span></a>
 in gRPC Core runtime) to configure the channel.</p></li>
 <li><p><strong>compression</strong> – An optional value indicating the compression method to be
 used over the lifetime of the channel. This is an EXPERIMENTAL option.</p></li>
@@ -346,7 +347,7 @@ before the server is started.</p></li>
 and optionally manipulate the incoming RPCs before handing them over to
 handlers. The interceptors are given control in the order they are
 specified. This is an EXPERIMENTAL API.</p></li>
-<li><p><strong>options</strong> – An optional list of key-value pairs (channel args in gRPC runtime)
+<li><p><strong>options</strong> – An optional list of key-value pairs (<a class="reference internal" href="glossary.html#term-channel_arguments"><span class="xref std std-term">channel_arguments</span></a> in gRPC runtime)
 to configure the channel.</p></li>
 <li><p><strong>maximum_concurrent_rpcs</strong> – The maximum number of concurrent RPCs this server
 will service before returning RESOURCE_EXHAUSTED status, or None to
@@ -472,7 +473,7 @@ grpc.LocalConnectionType.UDS or grpc.LocalConnectionType.LOCAL_TCP)</p>
 <h3>Local Connection Type<a class="headerlink" href="#local-connection-type" title="Permalink to this headline">¶</a></h3>
 <dl class="py class">
 <dt id="grpc.LocalConnectionType">
-<em class="property">class </em><code class="sig-prename descclassname">grpc.</code><code class="sig-name descname">LocalConnectionType</code><a class="reference internal" href="_modules/grpc.html#LocalConnectionType"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.LocalConnectionType" title="Permalink to this definition">¶</a></dt>
+<em class="property">class </em><code class="sig-prename descclassname">grpc.</code><code class="sig-name descname">LocalConnectionType</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">value</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc.html#LocalConnectionType"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.LocalConnectionType" title="Permalink to this definition">¶</a></dt>
 <dd><p>Types of local connection for local credential creation.</p>
 <dl class="py attribute">
 <dt id="grpc.LocalConnectionType.UDS">
@@ -612,7 +613,7 @@ ChannelConnectivity.READY.</p>
 <h3>Channel Connectivity<a class="headerlink" href="#channel-connectivity" title="Permalink to this headline">¶</a></h3>
 <dl class="py class">
 <dt id="grpc.ChannelConnectivity">
-<em class="property">class </em><code class="sig-prename descclassname">grpc.</code><code class="sig-name descname">ChannelConnectivity</code><a class="reference internal" href="_modules/grpc.html#ChannelConnectivity"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.ChannelConnectivity" title="Permalink to this definition">¶</a></dt>
+<em class="property">class </em><code class="sig-prename descclassname">grpc.</code><code class="sig-name descname">ChannelConnectivity</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">value</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc.html#ChannelConnectivity"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.ChannelConnectivity" title="Permalink to this definition">¶</a></dt>
 <dd><p>Mirrors grpc_connectivity_state in the gRPC Core.</p>
 <dl class="py attribute">
 <dt id="grpc.ChannelConnectivity.IDLE">
@@ -652,7 +653,7 @@ to recover.</p>
 <h3>gRPC Status Code<a class="headerlink" href="#grpc-status-code" title="Permalink to this headline">¶</a></h3>
 <dl class="py class">
 <dt id="grpc.StatusCode">
-<em class="property">class </em><code class="sig-prename descclassname">grpc.</code><code class="sig-name descname">StatusCode</code><a class="reference internal" href="_modules/grpc.html#StatusCode"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.StatusCode" title="Permalink to this definition">¶</a></dt>
+<em class="property">class </em><code class="sig-prename descclassname">grpc.</code><code class="sig-name descname">StatusCode</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">value</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc.html#StatusCode"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.StatusCode" title="Permalink to this definition">¶</a></dt>
 <dd><p>Mirrors grpc_status_code in the gRPC Core.</p>
 <dl class="py attribute">
 <dt id="grpc.StatusCode.OK">
@@ -1302,8 +1303,8 @@ the service-side of the RPC.</p>
 <dl class="py attribute">
 <dt id="grpc.ClientCallDetails.wait_for_ready">
 <code class="sig-name descname">wait_for_ready</code><a class="headerlink" href="#grpc.ClientCallDetails.wait_for_ready" title="Permalink to this definition">¶</a></dt>
-<dd><p>This is an EXPERIMENTAL argument. An optional flag t
-enable wait for ready mechanism.</p>
+<dd><p>This is an EXPERIMENTAL argument. An optional
+flag to enable <a class="reference internal" href="glossary.html#term-wait_for_ready"><span class="xref std std-term">wait_for_ready</span></a> mechanism.</p>
 </dd></dl>
 
 <dl class="py attribute">
@@ -1858,7 +1859,7 @@ service-side of the RPC.</p></li>
 <li><p><strong>credentials</strong> – An optional CallCredentials for the RPC. Only valid for
 secure Channel.</p></li>
 <li><p><strong>wait_for_ready</strong> – This is an EXPERIMENTAL argument. An optional
-flag to enable wait for ready mechanism</p></li>
+flag to enable <a class="reference internal" href="glossary.html#term-wait_for_ready"><span class="xref std std-term">wait_for_ready</span></a> mechanism.</p></li>
 <li><p><strong>compression</strong> – An element of grpc.compression, e.g.
 grpc.compression.Gzip. This is an EXPERIMENTAL option.</p></li>
 </ul>
@@ -1889,7 +1890,7 @@ service-side of the RPC.</p></li>
 <li><p><strong>credentials</strong> – An optional CallCredentials for the RPC. Only valid for
 secure Channel.</p></li>
 <li><p><strong>wait_for_ready</strong> – This is an EXPERIMENTAL argument. An optional
-flag to enable wait for ready mechanism</p></li>
+flag to enable <a class="reference internal" href="glossary.html#term-wait_for_ready"><span class="xref std std-term">wait_for_ready</span></a> mechanism.</p></li>
 <li><p><strong>compression</strong> – An element of grpc.compression, e.g.
 grpc.compression.Gzip. This is an EXPERIMENTAL option.</p></li>
 </ul>
@@ -1919,7 +1920,7 @@ service-side of the RPC.</p></li>
 <li><p><strong>credentials</strong> – An optional CallCredentials for the RPC. Only valid for
 secure Channel.</p></li>
 <li><p><strong>wait_for_ready</strong> – This is an EXPERIMENTAL argument. An optional
-flag to enable wait for ready mechanism</p></li>
+flag to enable <a class="reference internal" href="glossary.html#term-wait_for_ready"><span class="xref std std-term">wait_for_ready</span></a> mechanism.</p></li>
 <li><p><strong>compression</strong> – An element of grpc.compression, e.g.
 grpc.compression.Gzip. This is an EXPERIMENTAL option.</p></li>
 </ul>
@@ -1956,7 +1957,7 @@ service-side of the RPC.</p></li>
 <li><p><strong>credentials</strong> – An optional CallCredentials for the RPC. Only valid for
 secure Channel.</p></li>
 <li><p><strong>wait_for_ready</strong> – This is an EXPERIMENTAL argument. An optional
-flag to enable wait for ready mechanism</p></li>
+flag to enable <a class="reference internal" href="glossary.html#term-wait_for_ready"><span class="xref std std-term">wait_for_ready</span></a> mechanism.</p></li>
 <li><p><strong>compression</strong> – An element of grpc.compression, e.g.
 grpc.compression.Gzip. This is an EXPERIMENTAL option.</p></li>
 </ul>
@@ -1992,7 +1993,7 @@ service-side of the RPC.</p></li>
 <li><p><strong>credentials</strong> – An optional CallCredentials for the RPC. Only valid for
 secure Channel.</p></li>
 <li><p><strong>wait_for_ready</strong> – This is an EXPERIMENTAL argument. An optional
-flag to enable wait for ready mechanism</p></li>
+flag to enable <a class="reference internal" href="glossary.html#term-wait_for_ready"><span class="xref std std-term">wait_for_ready</span></a> mechanism.</p></li>
 <li><p><strong>compression</strong> – An element of grpc.compression, e.g.
 grpc.compression.Gzip. This is an EXPERIMENTAL option.</p></li>
 </ul>
@@ -2023,7 +2024,7 @@ service-side of the RPC.</p></li>
 <li><p><strong>credentials</strong> – An optional CallCredentials for the RPC. Only valid for
 secure Channel.</p></li>
 <li><p><strong>wait_for_ready</strong> – This is an EXPERIMENTAL argument. An optional
-flag to enable wait for ready mechanism</p></li>
+flag to enable <a class="reference internal" href="glossary.html#term-wait_for_ready"><span class="xref std std-term">wait_for_ready</span></a> mechanism.</p></li>
 <li><p><strong>compression</strong> – An element of grpc.compression, e.g.
 grpc.compression.Gzip. This is an EXPERIMENTAL option.</p></li>
 </ul>
@@ -2054,7 +2055,7 @@ service-side of the RPC.</p></li>
 <li><p><strong>credentials</strong> – An optional CallCredentials for the RPC. Only valid for
 secure Channel.</p></li>
 <li><p><strong>wait_for_ready</strong> – This is an EXPERIMENTAL argument. An optional
-flag to enable wait for ready mechanism</p></li>
+flag to enable <a class="reference internal" href="glossary.html#term-wait_for_ready"><span class="xref std std-term">wait_for_ready</span></a> mechanism.</p></li>
 <li><p><strong>compression</strong> – An element of grpc.compression, e.g.
 grpc.compression.Gzip. This is an EXPERIMENTAL option.</p></li>
 </ul>
@@ -2091,7 +2092,7 @@ service-side of the RPC.</p></li>
 <li><p><strong>credentials</strong> – An optional CallCredentials for the RPC. Only valid for
 secure Channel.</p></li>
 <li><p><strong>wait_for_ready</strong> – This is an EXPERIMENTAL argument. An optional
-flag to enable wait for ready mechanism</p></li>
+flag to enable <a class="reference internal" href="glossary.html#term-wait_for_ready"><span class="xref std std-term">wait_for_ready</span></a> mechanism.</p></li>
 <li><p><strong>compression</strong> – An element of grpc.compression, e.g.
 grpc.compression.Gzip. This is an EXPERIMENTAL option.</p></li>
 </ul>
@@ -2134,7 +2135,7 @@ may be ongoing, or may have already completed.</p>
 <dd><p>Adds a function to be called at completion of the computation.</p>
 <p>The callback will be passed this Future object describing the outcome
 of the computation.  Callbacks will be invoked after the future is
-terimated, whether successfully or not.</p>
+terminated, whether successfully or not.</p>
 <p>If the computation has already completed, the callback will be called
 immediately.</p>
 <p>Exceptions raised in the callback will be logged at ERROR level, but
@@ -2310,7 +2311,7 @@ if the computation did not raise an exception.</p>
 <h3>Compression<a class="headerlink" href="#compression" title="Permalink to this headline">¶</a></h3>
 <dl class="py class">
 <dt id="grpc.Compression">
-<em class="property">class </em><code class="sig-prename descclassname">grpc.</code><code class="sig-name descname">Compression</code><a class="reference internal" href="_modules/grpc.html#Compression"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.Compression" title="Permalink to this definition">¶</a></dt>
+<em class="property">class </em><code class="sig-prename descclassname">grpc.</code><code class="sig-name descname">Compression</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">value</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc.html#Compression"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.Compression" title="Permalink to this definition">¶</a></dt>
 <dd><p>Indicates the compression method to be used for an RPC.</p>
 <p>This enumeration is part of an EXPERIMENTAL API.</p>
 <dl class="py attribute">
@@ -2345,7 +2346,7 @@ if the computation did not raise an exception.</p>
     <div class="clearer"></div>
   </div>
     <div class="footer">
-      &copy;2018, The gRPC Authors.
+      &copy;2020, The gRPC Authors.
       
       |
       <a href="_sources/grpc.rst.txt"

+ 116 - 211
python/grpc_asyncio.html

@@ -4,7 +4,8 @@
 <html lang="en">
   <head>
     <meta charset="utf-8" />
-    <title>gRPC AsyncIO API &#8212; gRPC Python 1.29.0 documentation</title>
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>gRPC AsyncIO API &#8212; 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>
@@ -31,7 +32,7 @@
 
 
 
-<p class="blurb">1.29.0</p>
+<p class="blurb">1.31.0</p>
 
 
 
@@ -45,8 +46,8 @@
 <li class="toctree-l1 current"><a class="current reference internal" href="#">gRPC AsyncIO API</a><ul>
 <li class="toctree-l2"><a class="reference internal" href="#overview">Overview</a></li>
 <li class="toctree-l2"><a class="reference internal" href="#caveats">Caveats</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#blocking-code-in-asyncio">Blocking Code in AsyncIO</a></li>
 <li class="toctree-l2"><a class="reference internal" href="#module-contents">Module Contents</a><ul>
-<li class="toctree-l3"><a class="reference internal" href="#enable-asyncio-in-grpc">Enable AsyncIO in gRPC</a></li>
 <li class="toctree-l3"><a class="reference internal" href="#create-channel">Create Channel</a></li>
 <li class="toctree-l3"><a class="reference internal" href="#channel-object">Channel Object</a></li>
 <li class="toctree-l3"><a class="reference internal" href="#create-server">Create Server</a></li>
@@ -121,26 +122,14 @@ suggestions by opening issues on our GitHub repo <a class="reference external" h
 <p>gRPC Async API objects may only be used on the thread on which they were
 created. AsyncIO doesn’t provide thread safety for most of its APIs.</p>
 </div>
+<div class="section" id="blocking-code-in-asyncio">
+<h2>Blocking Code in AsyncIO<a class="headerlink" href="#blocking-code-in-asyncio" title="Permalink to this headline">¶</a></h2>
+<p>Making blocking function calls in coroutines or in the thread running event
+loop will block the event loop, potentially starving all RPCs in the process.
+Refer to the Python language documentation on AsyncIO for more details (<a class="reference external" href="https://docs.python.org/3/library/asyncio-dev.html#running-blocking-code">running-blocking-code</a>).</p>
+</div>
 <div class="section" id="module-contents">
 <h2>Module Contents<a class="headerlink" href="#module-contents" title="Permalink to this headline">¶</a></h2>
-<div class="section" id="enable-asyncio-in-grpc">
-<h3>Enable AsyncIO in gRPC<a class="headerlink" href="#enable-asyncio-in-grpc" title="Permalink to this headline">¶</a></h3>
-<dl class="py function">
-<dt id="grpc.experimental.aio.init_grpc_aio">
-<code class="sig-prename descclassname">grpc.experimental.aio.</code><code class="sig-name descname">init_grpc_aio</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#grpc.experimental.aio.init_grpc_aio" title="Permalink to this definition">¶</a></dt>
-<dd><p>Enable AsyncIO for gRPC Python.</p>
-<p>This function is idempotent and it should be invoked before creation of
-AsyncIO stack objects. Otherwise, the application might deadlock.</p>
-<p>This function configurates the gRPC C-Core to invoke AsyncIO methods for IO
-operations (e.g., socket read, write). The configuration applies to the
-entire process.</p>
-<p>After invoking this function, making blocking function calls in coroutines
-or in the thread running event loop will block the event loop, potentially
-starving all RPCs in the process. Refer to the Python language
-documentation on AsyncIO for more details (<a class="reference external" href="https://docs.python.org/3/library/asyncio-dev.html#running-blocking-code">running-blocking-code</a>).</p>
-</dd></dl>
-
-</div>
 <div class="section" id="create-channel">
 <h3>Create Channel<a class="headerlink" href="#create-channel" title="Permalink to this headline">¶</a></h3>
 <p>Channels are the abstraction of clients, where most of networking logic
@@ -156,11 +145,11 @@ application can invoke remote functions as if they are local functions.</p>
 <dt class="field-odd">Parameters</dt>
 <dd class="field-odd"><ul class="simple">
 <li><p><strong>target</strong> (<em>str</em>) – The server address</p></li>
-<li><p><strong>options</strong> (<em>Optional</em><em>[</em><em>Sequence</em><em>[</em><em>Tuple</em><em>[</em><em>str</em><em>, </em><em>Any</em><em>]</em><em>]</em><em>]</em>) – An optional list of key-value pairs (channel args
+<li><p><strong>options</strong> (<em>Optional</em><em>[</em><em>Sequence</em><em>[</em><em>Tuple</em><em>[</em><em>str</em><em>, </em><em>Any</em><em>]</em><em>]</em><em>]</em>) – An optional list of key-value pairs (<a class="reference internal" href="glossary.html#term-channel_arguments"><span class="xref std std-term">channel_arguments</span></a>
 in gRPC Core runtime) to configure the channel.</p></li>
 <li><p><strong>compression</strong> (<em>Optional</em><em>[</em><a class="reference internal" href="grpc.html#grpc.Compression" title="grpc.Compression"><em>grpc.Compression</em></a><em>]</em>) – An optional value indicating the compression method to be
 used over the lifetime of the channel. This is an EXPERIMENTAL option.</p></li>
-<li><p><strong>interceptors</strong> (<em>Optional</em><em>[</em><em>Sequence</em><em>[</em><em>grpc.experimental.aio._interceptor.UnaryUnaryClientInterceptor</em><em>]</em><em>]</em>) – An optional sequence of interceptors that will be executed for
+<li><p><strong>interceptors</strong> (<em>Optional</em><em>[</em><em>Sequence</em><em>[</em><em>grpc.experimental.aio._interceptor.ClientInterceptor</em><em>]</em><em>]</em>) – An optional sequence of interceptors that will be executed for
 any call executed with this channel.</p></li>
 </ul>
 </dd>
@@ -179,11 +168,11 @@ any call executed with this channel.</p></li>
 <dd class="field-odd"><ul class="simple">
 <li><p><strong>target</strong> (<em>str</em>) – The server address.</p></li>
 <li><p><strong>credentials</strong> (<a class="reference internal" href="grpc.html#grpc.ChannelCredentials" title="grpc.ChannelCredentials"><em>grpc.ChannelCredentials</em></a>) – A ChannelCredentials instance.</p></li>
-<li><p><strong>options</strong> (<em>Optional</em><em>[</em><em>Sequence</em><em>[</em><em>Tuple</em><em>[</em><em>str</em><em>, </em><em>Any</em><em>]</em><em>]</em><em>]</em>) – An optional list of key-value pairs (channel args
+<li><p><strong>options</strong> (<em>Optional</em><em>[</em><em>Sequence</em><em>[</em><em>Tuple</em><em>[</em><em>str</em><em>, </em><em>Any</em><em>]</em><em>]</em><em>]</em>) – An optional list of key-value pairs (<a class="reference internal" href="glossary.html#term-channel_arguments"><span class="xref std std-term">channel_arguments</span></a>
 in gRPC Core runtime) to configure the channel.</p></li>
 <li><p><strong>compression</strong> (<em>Optional</em><em>[</em><a class="reference internal" href="grpc.html#grpc.Compression" title="grpc.Compression"><em>grpc.Compression</em></a><em>]</em>) – An optional value indicating the compression method to be
 used over the lifetime of the channel. This is an EXPERIMENTAL option.</p></li>
-<li><p><strong>interceptors</strong> (<em>Optional</em><em>[</em><em>Sequence</em><em>[</em><em>grpc.experimental.aio._interceptor.UnaryUnaryClientInterceptor</em><em>]</em><em>]</em>) – An optional sequence of interceptors that will be executed for
+<li><p><strong>interceptors</strong> (<em>Optional</em><em>[</em><em>Sequence</em><em>[</em><em>grpc.experimental.aio._interceptor.ClientInterceptor</em><em>]</em><em>]</em>) – An optional sequence of interceptors that will be executed for
 any call executed with this channel.</p></li>
 </ul>
 </dd>
@@ -412,7 +401,7 @@ before the server is started.</p></li>
 and optionally manipulate the incoming RPCs before handing them over to
 handlers. The interceptors are given control in the order they are
 specified. This is an EXPERIMENTAL API.</p></li>
-<li><p><strong>options</strong> (<em>Optional</em><em>[</em><em>Sequence</em><em>[</em><em>Tuple</em><em>[</em><em>str</em><em>, </em><em>Any</em><em>]</em><em>]</em><em>]</em>) – An optional list of key-value pairs (channel args in gRPC runtime)
+<li><p><strong>options</strong> (<em>Optional</em><em>[</em><em>Sequence</em><em>[</em><em>Tuple</em><em>[</em><em>str</em><em>, </em><em>Any</em><em>]</em><em>]</em><em>]</em>) – An optional list of key-value pairs (<a class="reference internal" href="glossary.html#term-channel_arguments"><span class="xref std std-term">channel_arguments</span></a> in gRPC runtime)
 to configure the channel.</p></li>
 <li><p><strong>maximum_concurrent_rpcs</strong> (<em>Optional</em><em>[</em><em>int</em><em>]</em>) – The maximum number of concurrent RPCs this server
 will service before returning RESOURCE_EXHAUSTED status, or None to
@@ -602,7 +591,7 @@ perform certain clean-up logic, and then re-raise it.</p>
 
 <dl class="py exception">
 <dt id="grpc.experimental.aio.AioRpcError">
-<em class="property">exception </em><code class="sig-prename descclassname">grpc.experimental.aio.</code><code class="sig-name descname">AioRpcError</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">code</span></em>, <em class="sig-param"><span class="n">details</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">initial_metadata</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">trailing_metadata</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">debug_error_string</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_call.html#AioRpcError"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.AioRpcError" title="Permalink to this definition">¶</a></dt>
+<em class="property">exception </em><code class="sig-prename descclassname">grpc.experimental.aio.</code><code class="sig-name descname">AioRpcError</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">code</span></em>, <em class="sig-param"><span class="n">initial_metadata</span></em>, <em class="sig-param"><span class="n">trailing_metadata</span></em>, <em class="sig-param"><span class="n">details</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">debug_error_string</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_call.html#AioRpcError"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.AioRpcError" title="Permalink to this definition">¶</a></dt>
 <dd><p>An implementation of RpcError to be used by the asynchronous API.</p>
 <p>Raised RpcError is a snapshot of the final status of the RPC, values are
 determined. Hence, its methods no longer needs to be coroutines.</p>
@@ -610,9 +599,9 @@ determined. Hence, its methods no longer needs to be coroutines.</p>
 <dt class="field-odd">Parameters</dt>
 <dd class="field-odd"><ul class="simple">
 <li><p><strong>code</strong> (<a class="reference internal" href="grpc.html#grpc.StatusCode" title="grpc.StatusCode"><em>grpc.StatusCode</em></a>) – </p></li>
+<li><p><strong>initial_metadata</strong> (<em>grpc.experimental.aio._metadata.Metadata</em>) – </p></li>
+<li><p><strong>trailing_metadata</strong> (<em>grpc.experimental.aio._metadata.Metadata</em>) – </p></li>
 <li><p><strong>details</strong> (<em>Optional</em><em>[</em><em>str</em><em>]</em>) – </p></li>
-<li><p><strong>AnyStr</strong><strong>]</strong><strong>]</strong><strong>] </strong><strong>initial_metadata</strong> (<em>Optional</em><em>[</em><em>Sequence</em><em>[</em><em>Tuple</em><em>[</em><em>str</em><em>,</em>) – </p></li>
-<li><p><strong>AnyStr</strong><strong>]</strong><strong>]</strong><strong>] </strong><strong>trailing_metadata</strong> (<em>Optional</em><em>[</em><em>Sequence</em><em>[</em><em>Tuple</em><em>[</em><em>str</em><em>,</em>) – </p></li>
 <li><p><strong>debug_error_string</strong> (<em>Optional</em><em>[</em><em>str</em><em>]</em>) – </p></li>
 </ul>
 </dd>
@@ -671,7 +660,7 @@ determined. Hence, its methods no longer needs to be coroutines.</p>
 <dd class="field-odd"><p>The initial metadata received.</p>
 </dd>
 <dt class="field-even">Return type</dt>
-<dd class="field-even"><p>Optional[Sequence[Tuple[str, AnyStr]]]</p>
+<dd class="field-even"><p>grpc.experimental.aio._metadata.Metadata</p>
 </dd>
 </dl>
 </dd></dl>
@@ -685,7 +674,7 @@ determined. Hence, its methods no longer needs to be coroutines.</p>
 <dd class="field-odd"><p>The trailing metadata received.</p>
 </dd>
 <dt class="field-even">Return type</dt>
-<dd class="field-even"><p>Optional[Sequence[Tuple[str, AnyStr]]]</p>
+<dd class="field-even"><p>grpc.experimental.aio._metadata.Metadata</p>
 </dd>
 </dl>
 </dd></dl>
@@ -823,7 +812,7 @@ timed out, or None if no deadline was specified for the RPC.</p>
 <dd class="field-odd"><p>The initial <a class="reference internal" href="glossary.html#term-metadata"><span class="xref std std-term">metadata</span></a>.</p>
 </dd>
 <dt class="field-even">Return type</dt>
-<dd class="field-even"><p>Sequence[Tuple[str, AnyStr]]</p>
+<dd class="field-even"><p>grpc.experimental.aio._metadata.Metadata</p>
 </dd>
 </dl>
 </dd></dl>
@@ -837,7 +826,7 @@ timed out, or None if no deadline was specified for the RPC.</p>
 <dd class="field-odd"><p>The trailing <a class="reference internal" href="glossary.html#term-metadata"><span class="xref std std-term">metadata</span></a>.</p>
 </dd>
 <dt class="field-even">Return type</dt>
-<dd class="field-even"><p>Sequence[Tuple[str, AnyStr]]</p>
+<dd class="field-even"><p>grpc.experimental.aio._metadata.Metadata</p>
 </dd>
 </dl>
 </dd></dl>
@@ -862,7 +851,7 @@ failure.</p>
 
 <dl class="py class">
 <dt id="grpc.experimental.aio.UnaryUnaryCall">
-<em class="property">class </em><code class="sig-prename descclassname">grpc.experimental.aio.</code><code class="sig-name descname">UnaryUnaryCall</code><a class="reference internal" href="_modules/grpc/experimental/aio/_base_call.html#UnaryUnaryCall"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.UnaryUnaryCall" title="Permalink to this definition">¶</a></dt>
+<em class="property">class </em><code class="sig-prename descclassname">grpc.experimental.aio.</code><code class="sig-name descname">UnaryUnaryCall</code><span class="sig-paren">(</span><em class="sig-param"><span class="o">*</span><span class="n">args</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwds</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_base_call.html#UnaryUnaryCall"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.UnaryUnaryCall" title="Permalink to this definition">¶</a></dt>
 <dd><p>The abstract base class of an unary-unary RPC on the client-side.</p>
 <dl class="py method">
 <dt id="grpc.experimental.aio.UnaryUnaryCall.__await__">
@@ -882,7 +871,7 @@ failure.</p>
 
 <dl class="py class">
 <dt id="grpc.experimental.aio.UnaryStreamCall">
-<em class="property">class </em><code class="sig-prename descclassname">grpc.experimental.aio.</code><code class="sig-name descname">UnaryStreamCall</code><a class="reference internal" href="_modules/grpc/experimental/aio/_base_call.html#UnaryStreamCall"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.UnaryStreamCall" title="Permalink to this definition">¶</a></dt>
+<em class="property">class </em><code class="sig-prename descclassname">grpc.experimental.aio.</code><code class="sig-name descname">UnaryStreamCall</code><span class="sig-paren">(</span><em class="sig-param"><span class="o">*</span><span class="n">args</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwds</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_base_call.html#UnaryStreamCall"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.UnaryStreamCall" title="Permalink to this definition">¶</a></dt>
 <dd><dl class="py method">
 <dt id="grpc.experimental.aio.UnaryStreamCall.__aiter__">
 <em class="property">abstract </em><code class="sig-name descname">__aiter__</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_base_call.html#UnaryStreamCall.__aiter__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.UnaryStreamCall.__aiter__" title="Permalink to this definition">¶</a></dt>
@@ -919,7 +908,7 @@ stream.</p>
 
 <dl class="py class">
 <dt id="grpc.experimental.aio.StreamUnaryCall">
-<em class="property">class </em><code class="sig-prename descclassname">grpc.experimental.aio.</code><code class="sig-name descname">StreamUnaryCall</code><a class="reference internal" href="_modules/grpc/experimental/aio/_base_call.html#StreamUnaryCall"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.StreamUnaryCall" title="Permalink to this definition">¶</a></dt>
+<em class="property">class </em><code class="sig-prename descclassname">grpc.experimental.aio.</code><code class="sig-name descname">StreamUnaryCall</code><span class="sig-paren">(</span><em class="sig-param"><span class="o">*</span><span class="n">args</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwds</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_base_call.html#StreamUnaryCall"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.StreamUnaryCall" title="Permalink to this definition">¶</a></dt>
 <dd><dl class="py method">
 <dt id="grpc.experimental.aio.StreamUnaryCall.__await__">
 <em class="property">abstract </em><code class="sig-name descname">__await__</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_base_call.html#StreamUnaryCall.__await__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.StreamUnaryCall.__await__" title="Permalink to this definition">¶</a></dt>
@@ -968,7 +957,7 @@ function will fail. This function is idempotent.</p>
 
 <dl class="py class">
 <dt id="grpc.experimental.aio.StreamStreamCall">
-<em class="property">class </em><code class="sig-prename descclassname">grpc.experimental.aio.</code><code class="sig-name descname">StreamStreamCall</code><a class="reference internal" href="_modules/grpc/experimental/aio/_base_call.html#StreamStreamCall"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.StreamStreamCall" title="Permalink to this definition">¶</a></dt>
+<em class="property">class </em><code class="sig-prename descclassname">grpc.experimental.aio.</code><code class="sig-name descname">StreamStreamCall</code><span class="sig-paren">(</span><em class="sig-param"><span class="o">*</span><span class="n">args</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwds</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_base_call.html#StreamStreamCall"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.StreamStreamCall" title="Permalink to this definition">¶</a></dt>
 <dd><dl class="py method">
 <dt id="grpc.experimental.aio.StreamStreamCall.__aiter__">
 <em class="property">abstract </em><code class="sig-name descname">__aiter__</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_base_call.html#StreamStreamCall.__aiter__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.StreamStreamCall.__aiter__" title="Permalink to this definition">¶</a></dt>
@@ -1038,7 +1027,7 @@ stream.</p>
 <h3>Server-Side Context<a class="headerlink" href="#server-side-context" title="Permalink to this headline">¶</a></h3>
 <dl class="py class">
 <dt id="grpc.experimental.aio.ServicerContext">
-<em class="property">class </em><code class="sig-prename descclassname">grpc.experimental.aio.</code><code class="sig-name descname">ServicerContext</code><a class="reference internal" href="_modules/grpc/experimental/aio/_base_server.html#ServicerContext"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.ServicerContext" title="Permalink to this definition">¶</a></dt>
+<em class="property">class </em><code class="sig-prename descclassname">grpc.experimental.aio.</code><code class="sig-name descname">ServicerContext</code><span class="sig-paren">(</span><em class="sig-param"><span class="o">*</span><span class="n">args</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwds</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_base_server.html#ServicerContext"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.ServicerContext" title="Permalink to this definition">¶</a></dt>
 <dd><p>A context object passed to method implementations.</p>
 <dl class="py method">
 <dt id="grpc.experimental.aio.ServicerContext.abort">
@@ -1053,7 +1042,7 @@ ones.</p>
 It must not be StatusCode.OK.</p></li>
 <li><p><strong>details</strong> (<em>str</em>) – A UTF-8-encodable string to be sent to the client upon
 termination of the RPC.</p></li>
-<li><p><strong>trailing_metadata</strong> (<em>Sequence</em><em>[</em><em>Tuple</em><em>[</em><em>str</em><em>, </em><em>AnyStr</em><em>]</em><em>]</em>) – A sequence of tuple represents the trailing
+<li><p><strong>trailing_metadata</strong> (<em>grpc.experimental.aio._metadata.Metadata</em>) – A sequence of tuple represents the trailing
 <a class="reference internal" href="glossary.html#term-metadata"><span class="xref std std-term">metadata</span></a>.</p></li>
 </ul>
 </dd>
@@ -1067,6 +1056,20 @@ termination of the RPC.</p></li>
 </dl>
 </dd></dl>
 
+<dl class="py method">
+<dt id="grpc.experimental.aio.ServicerContext.auth_context">
+<em class="property">abstract </em><code class="sig-name descname">auth_context</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_base_server.html#ServicerContext.auth_context"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.ServicerContext.auth_context" title="Permalink to this definition">¶</a></dt>
+<dd><p>Gets the auth context for the call.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>A map of strings to an iterable of bytes for each auth property.</p>
+</dd>
+<dt class="field-even">Return type</dt>
+<dd class="field-even"><p>Mapping[str, Iterable[bytes]]</p>
+</dd>
+</dl>
+</dd></dl>
+
 <dl class="py method">
 <dt id="grpc.experimental.aio.ServicerContext.disable_next_message_compression">
 <em class="property">abstract </em><code class="sig-name descname">disable_next_message_compression</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_base_server.html#ServicerContext.disable_next_message_compression"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.ServicerContext.disable_next_message_compression" title="Permalink to this definition">¶</a></dt>
@@ -1090,7 +1093,56 @@ server creation or set on the call.</p>
 <dd class="field-odd"><p>The invocation <a class="reference internal" href="glossary.html#term-metadata"><span class="xref std std-term">metadata</span></a>.</p>
 </dd>
 <dt class="field-even">Return type</dt>
-<dd class="field-even"><p>Optional[Sequence[Tuple[str, AnyStr]]]</p>
+<dd class="field-even"><p>Optional[grpc.experimental.aio._metadata.Metadata]</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="py method">
+<dt id="grpc.experimental.aio.ServicerContext.peer">
+<em class="property">abstract </em><code class="sig-name descname">peer</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_base_server.html#ServicerContext.peer"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.ServicerContext.peer" title="Permalink to this definition">¶</a></dt>
+<dd><p>Identifies the peer that invoked the RPC being serviced.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>A string identifying the peer that invoked the RPC being serviced.
+The string format is determined by gRPC runtime.</p>
+</dd>
+<dt class="field-even">Return type</dt>
+<dd class="field-even"><p>str</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="py method">
+<dt id="grpc.experimental.aio.ServicerContext.peer_identities">
+<em class="property">abstract </em><code class="sig-name descname">peer_identities</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_base_server.html#ServicerContext.peer_identities"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.ServicerContext.peer_identities" title="Permalink to this definition">¶</a></dt>
+<dd><p>Gets one or more peer identity(s).</p>
+<p>Equivalent to
+servicer_context.auth_context().get(servicer_context.peer_identity_key())</p>
+<dl class="field-list simple">
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>An iterable of the identities, or None if the call is not
+authenticated. Each identity is returned as a raw bytes type.</p>
+</dd>
+<dt class="field-even">Return type</dt>
+<dd class="field-even"><p>Optional[Iterable[bytes]]</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="py method">
+<dt id="grpc.experimental.aio.ServicerContext.peer_identity_key">
+<em class="property">abstract </em><code class="sig-name descname">peer_identity_key</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_base_server.html#ServicerContext.peer_identity_key"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.ServicerContext.peer_identity_key" title="Permalink to this definition">¶</a></dt>
+<dd><p>The auth property used to identify the peer.</p>
+<p>For example, “x509_common_name” or “x509_subject_alternative_name” are
+used to identify an SSL peer.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>The auth property (string) that indicates the
+peer identity, or None if the call is not authenticated.</p>
+</dd>
+<dt class="field-even">Return type</dt>
+<dd class="field-even"><p>Optional[str]</p>
 </dd>
 </dl>
 </dd></dl>
@@ -1121,7 +1173,7 @@ server creation or set on the call.</p>
 metadata to add to what the gRPC runtime will transmit.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><p><strong>initial_metadata</strong> (<em>Sequence</em><em>[</em><em>Tuple</em><em>[</em><em>str</em><em>, </em><em>AnyStr</em><em>]</em><em>]</em>) – The initial <a class="reference internal" href="glossary.html#term-metadata"><span class="xref std std-term">metadata</span></a>.</p>
+<dd class="field-odd"><p><strong>initial_metadata</strong> (<em>grpc.experimental.aio._metadata.Metadata</em>) – The initial <a class="reference internal" href="glossary.html#term-metadata"><span class="xref std std-term">metadata</span></a>.</p>
 </dd>
 <dt class="field-even">Return type</dt>
 <dd class="field-even"><p>None</p>
@@ -1186,7 +1238,7 @@ termination of the RPC.</p>
 metadata to add to what the gRPC runtime will transmit.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><p><strong>trailing_metadata</strong> (<em>Sequence</em><em>[</em><em>Tuple</em><em>[</em><em>str</em><em>, </em><em>AnyStr</em><em>]</em><em>]</em>) – The trailing <a class="reference internal" href="glossary.html#term-metadata"><span class="xref std std-term">metadata</span></a>.</p>
+<dd class="field-odd"><p><strong>trailing_metadata</strong> (<em>grpc.experimental.aio._metadata.Metadata</em>) – The trailing <a class="reference internal" href="glossary.html#term-metadata"><span class="xref std std-term">metadata</span></a>.</p>
 </dd>
 <dt class="field-even">Return type</dt>
 <dd class="field-even"><p>None</p>
@@ -1219,7 +1271,7 @@ metadata to add to what the gRPC runtime will transmit.</p>
 <h3>Client-Side Interceptor<a class="headerlink" href="#client-side-interceptor" title="Permalink to this headline">¶</a></h3>
 <dl class="py class">
 <dt id="grpc.experimental.aio.ClientCallDetails">
-<em class="property">class </em><code class="sig-prename descclassname">grpc.experimental.aio.</code><code class="sig-name descname">ClientCallDetails</code><a class="reference internal" href="_modules/grpc/experimental/aio/_interceptor.html#ClientCallDetails"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.ClientCallDetails" title="Permalink to this definition">¶</a></dt>
+<em class="property">class </em><code class="sig-prename descclassname">grpc.experimental.aio.</code><code class="sig-name descname">ClientCallDetails</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">method</span></em>, <em class="sig-param"><span class="n">timeout</span></em>, <em class="sig-param"><span class="n">metadata</span></em>, <em class="sig-param"><span class="n">credentials</span></em>, <em class="sig-param"><span class="n">wait_for_ready</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_interceptor.html#ClientCallDetails"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.ClientCallDetails" title="Permalink to this definition">¶</a></dt>
 <dd><p>Describes an RPC to be invoked.</p>
 <p>This is an EXPERIMENTAL API.</p>
 <dl class="field-list simple">
@@ -1230,8 +1282,8 @@ metadata to add to what the gRPC runtime will transmit.</p>
 <li><p><strong>metadata</strong> – Optional metadata to be transmitted to the service-side of
 the RPC.</p></li>
 <li><p><strong>credentials</strong> – An optional CallCredentials for the RPC.</p></li>
-<li><p><strong>wait_for_ready</strong> – This is an EXPERIMENTAL argument. An optional flag to
-enable wait for ready mechanism.</p></li>
+<li><p><strong>wait_for_ready</strong> – This is an EXPERIMENTAL argument. An optional
+flag to enable <a class="reference internal" href="glossary.html#term-wait_for_ready"><span class="xref std std-term">wait_for_ready</span></a> mechanism.</p></li>
 </ul>
 </dd>
 </dl>
@@ -1239,127 +1291,10 @@ enable wait for ready mechanism.</p></li>
 
 <dl class="py class">
 <dt id="grpc.experimental.aio.InterceptedUnaryUnaryCall">
-<em class="property">class </em><code class="sig-prename descclassname">grpc.experimental.aio.</code><code class="sig-name descname">InterceptedUnaryUnaryCall</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">interceptors</span></em>, <em class="sig-param"><span class="n">request</span></em>, <em class="sig-param"><span class="n">timeout</span></em>, <em class="sig-param"><span class="n">metadata</span></em>, <em class="sig-param"><span class="n">credentials</span></em>, <em class="sig-param"><span class="n">wait_for_ready</span></em>, <em class="sig-param"><span class="n">channel</span></em>, <em class="sig-param"><span class="n">method</span></em>, <em class="sig-param"><span class="n">request_serializer</span></em>, <em class="sig-param"><span class="n">response_deserializer</span></em>, <em class="sig-param"><span class="n">loop</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_interceptor.html#InterceptedUnaryUnaryCall"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.InterceptedUnaryUnaryCall" title="Permalink to this definition">¶</a></dt>
+<em class="property">class </em><code class="sig-prename descclassname">grpc.experimental.aio.</code><code class="sig-name descname">InterceptedUnaryUnaryCall</code><span class="sig-paren">(</span><em class="sig-param"><span class="o">*</span><span class="n">args</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwds</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_interceptor.html#InterceptedUnaryUnaryCall"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.InterceptedUnaryUnaryCall" title="Permalink to this definition">¶</a></dt>
 <dd><p>Used for running a <cite>UnaryUnaryCall</cite> wrapped by interceptors.</p>
-<p>Interceptors might have some work to do before the RPC invocation with
-the capacity of changing the invocation parameters, and some work to do
-after the RPC invocation with the capacity for accessing to the wrapped
-<cite>UnaryUnaryCall</cite>.</p>
-<p>It handles also early and later cancellations, when the RPC has not even
-started and the execution is still held by the interceptors or when the
-RPC has finished but again the execution is still held by the interceptors.</p>
-<p>Once the RPC is finally executed, all methods are finally done against the
-intercepted call, being at the same time the same call returned to the
-interceptors.</p>
-<p>For most of the methods, like <cite>initial_metadata()</cite> the caller does not need
-to wait until the interceptors task is finished, once the RPC is done the
-caller will have the freedom for accessing to the results.</p>
 <p>For the <cite>__await__</cite> method is it is proxied to the intercepted call only when
 the interceptor task is finished.</p>
-<dl class="py method">
-<dt id="grpc.experimental.aio.InterceptedUnaryUnaryCall.add_done_callback">
-<code class="sig-name descname">add_done_callback</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">callback</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_interceptor.html#InterceptedUnaryUnaryCall.add_done_callback"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.InterceptedUnaryUnaryCall.add_done_callback" title="Permalink to this definition">¶</a></dt>
-<dd><p>Registers a callback to be called on RPC termination.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>callback</strong> (<em>Callable</em><em>[</em><em>[</em><em>Any</em><em>]</em><em>, </em><em>None</em><em>]</em>) – A callable object will be called with the call object as</p></li>
-<li><p><strong>only argument.</strong> (<em>its</em>) – </p></li>
-</ul>
-</dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p>None</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py method">
-<dt id="grpc.experimental.aio.InterceptedUnaryUnaryCall.cancel">
-<code class="sig-name descname">cancel</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_interceptor.html#InterceptedUnaryUnaryCall.cancel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.InterceptedUnaryUnaryCall.cancel" title="Permalink to this definition">¶</a></dt>
-<dd><p>Cancels the RPC.</p>
-<p>Idempotent and has no effect if the RPC has already terminated.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p>A bool indicates if the cancellation is performed or not.</p>
-</dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p>bool</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py method">
-<dt id="grpc.experimental.aio.InterceptedUnaryUnaryCall.cancelled">
-<code class="sig-name descname">cancelled</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_interceptor.html#InterceptedUnaryUnaryCall.cancelled"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.InterceptedUnaryUnaryCall.cancelled" title="Permalink to this definition">¶</a></dt>
-<dd><p>Return True if the RPC is cancelled.</p>
-<p>The RPC is cancelled when the cancellation was requested with cancel().</p>
-<dl class="field-list simple">
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p>A bool indicates whether the RPC is cancelled or not.</p>
-</dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p>bool</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py method">
-<dt id="grpc.experimental.aio.InterceptedUnaryUnaryCall.code">
-<em class="property">async </em><code class="sig-name descname">code</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_interceptor.html#InterceptedUnaryUnaryCall.code"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.InterceptedUnaryUnaryCall.code" title="Permalink to this definition">¶</a></dt>
-<dd><p>Accesses the status code sent by the server.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p>The StatusCode value for the RPC.</p>
-</dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p><a class="reference internal" href="grpc.html#grpc.StatusCode" title="grpc.StatusCode">grpc.StatusCode</a></p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py method">
-<dt id="grpc.experimental.aio.InterceptedUnaryUnaryCall.details">
-<em class="property">async </em><code class="sig-name descname">details</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_interceptor.html#InterceptedUnaryUnaryCall.details"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.InterceptedUnaryUnaryCall.details" title="Permalink to this definition">¶</a></dt>
-<dd><p>Accesses the details sent by the server.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p>The details string of the RPC.</p>
-</dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p>str</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py method">
-<dt id="grpc.experimental.aio.InterceptedUnaryUnaryCall.done">
-<code class="sig-name descname">done</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_interceptor.html#InterceptedUnaryUnaryCall.done"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.InterceptedUnaryUnaryCall.done" title="Permalink to this definition">¶</a></dt>
-<dd><p>Return True if the RPC is done.</p>
-<p>An RPC is done if the RPC is completed, cancelled or aborted.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p>A bool indicates if the RPC is done.</p>
-</dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p>bool</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py method">
-<dt id="grpc.experimental.aio.InterceptedUnaryUnaryCall.initial_metadata">
-<em class="property">async </em><code class="sig-name descname">initial_metadata</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_interceptor.html#InterceptedUnaryUnaryCall.initial_metadata"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.InterceptedUnaryUnaryCall.initial_metadata" title="Permalink to this definition">¶</a></dt>
-<dd><p>Accesses the initial metadata sent by the server.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p>The initial <a class="reference internal" href="glossary.html#term-metadata"><span class="xref std std-term">metadata</span></a>.</p>
-</dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p>Optional[Sequence[Tuple[str, AnyStr]]]</p>
-</dd>
-</dl>
-</dd></dl>
-
 <dl class="py method">
 <dt id="grpc.experimental.aio.InterceptedUnaryUnaryCall.time_remaining">
 <code class="sig-name descname">time_remaining</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_interceptor.html#InterceptedUnaryUnaryCall.time_remaining"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.InterceptedUnaryUnaryCall.time_remaining" title="Permalink to this definition">¶</a></dt>
@@ -1376,36 +1311,6 @@ timed out, or None if no deadline was specified for the RPC.</p>
 </dl>
 </dd></dl>
 
-<dl class="py method">
-<dt id="grpc.experimental.aio.InterceptedUnaryUnaryCall.trailing_metadata">
-<em class="property">async </em><code class="sig-name descname">trailing_metadata</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_interceptor.html#InterceptedUnaryUnaryCall.trailing_metadata"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.InterceptedUnaryUnaryCall.trailing_metadata" title="Permalink to this definition">¶</a></dt>
-<dd><p>Accesses the trailing metadata sent by the server.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p>The trailing <a class="reference internal" href="glossary.html#term-metadata"><span class="xref std std-term">metadata</span></a>.</p>
-</dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p>Optional[Sequence[Tuple[str, AnyStr]]]</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py method">
-<dt id="grpc.experimental.aio.InterceptedUnaryUnaryCall.wait_for_connection">
-<em class="property">async </em><code class="sig-name descname">wait_for_connection</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_interceptor.html#InterceptedUnaryUnaryCall.wait_for_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.InterceptedUnaryUnaryCall.wait_for_connection" title="Permalink to this definition">¶</a></dt>
-<dd><p>Waits until connected to peer and raises aio.AioRpcError if failed.</p>
-<p>This is an EXPERIMENTAL method.</p>
-<p>This method ensures the RPC has been successfully connected. Otherwise,
-an AioRpcError will be raised to explain the reason of the connection
-failure.</p>
-<p>This method is recommended for building retry mechanisms.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>None</p>
-</dd>
-</dl>
-</dd></dl>
-
 </dd></dl>
 
 <dl class="py class">
@@ -1420,12 +1325,12 @@ failure.</p>
 <dt class="field-odd">Parameters</dt>
 <dd class="field-odd"><ul class="simple">
 <li><p><strong>continuation</strong> (<em>Callable</em><em>[</em><em>[</em><em>grpc.experimental.aio._interceptor.ClientCallDetails</em><em>, </em><em>RequestType</em><em>]</em><em>, </em><em>grpc.experimental.aio._call.UnaryUnaryCall</em><em>]</em>) – A coroutine that proceeds with the invocation by
-executing the next interceptor in chain or invoking the
+executing the next interceptor in the chain or invoking the
 actual RPC on the underlying Channel. It is the interceptor’s
 responsibility to call it if it decides to move the RPC forward.
 The interceptor can use
-<cite>response_future = await continuation(client_call_details, request)</cite>
-to continue with the RPC. <cite>continuation</cite> returns the response of the
+<cite>call = await continuation(client_call_details, request)</cite>
+to continue with the RPC. <cite>continuation</cite> returns the call to the
 RPC.</p></li>
 <li><p><strong>client_call_details</strong> (<em>grpc.experimental.aio._interceptor.ClientCallDetails</em>) – A ClientCallDetails object describing the
 outgoing RPC.</p></li>
@@ -1458,7 +1363,7 @@ outgoing RPC.</p></li>
 <dd><p>Enables asynchronous invocation of a unary-call RPC.</p>
 <dl class="py method">
 <dt id="grpc.experimental.aio.UnaryUnaryMultiCallable.__call__">
-<em class="property">abstract </em><code class="sig-name descname">__call__</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">request</span></em>, <em class="sig-param"><span class="o">*</span></em>, <em class="sig-param"><span class="n">timeout</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">metadata</span><span class="o">=</span><span class="default_value">()</span></em>, <em class="sig-param"><span class="n">credentials</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">wait_for_ready</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">compression</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_base_channel.html#UnaryUnaryMultiCallable.__call__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.UnaryUnaryMultiCallable.__call__" title="Permalink to this definition">¶</a></dt>
+<em class="property">abstract </em><code class="sig-name descname">__call__</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">request</span></em>, <em class="sig-param"><span class="o">*</span></em>, <em class="sig-param"><span class="n">timeout</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">metadata</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">credentials</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">wait_for_ready</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">compression</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_base_channel.html#UnaryUnaryMultiCallable.__call__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.UnaryUnaryMultiCallable.__call__" title="Permalink to this definition">¶</a></dt>
 <dd><p>Asynchronously invokes the underlying RPC.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters</dt>
@@ -1466,12 +1371,12 @@ outgoing RPC.</p></li>
 <li><p><strong>request</strong> (<em>Any</em>) – The request value for the RPC.</p></li>
 <li><p><strong>timeout</strong> (<em>Optional</em><em>[</em><em>float</em><em>]</em>) – An optional duration of time in seconds to allow
 for the RPC.</p></li>
-<li><p><strong>metadata</strong> (<em>Optional</em><em>[</em><em>Sequence</em><em>[</em><em>Tuple</em><em>[</em><em>str</em><em>, </em><em>AnyStr</em><em>]</em><em>]</em><em>]</em>) – Optional <a class="reference internal" href="glossary.html#term-metadata"><span class="xref std std-term">metadata</span></a> to be transmitted to the
+<li><p><strong>metadata</strong> (<em>Optional</em><em>[</em><em>grpc.experimental.aio._metadata.Metadata</em><em>]</em>) – Optional <a class="reference internal" href="glossary.html#term-metadata"><span class="xref std std-term">metadata</span></a> to be transmitted to the
 service-side of the RPC.</p></li>
 <li><p><strong>credentials</strong> (<em>Optional</em><em>[</em><a class="reference internal" href="grpc.html#grpc.CallCredentials" title="grpc.CallCredentials"><em>grpc.CallCredentials</em></a><em>]</em>) – An optional CallCredentials for the RPC. Only valid for
 secure Channel.</p></li>
 <li><p><strong>wait_for_ready</strong> (<em>Optional</em><em>[</em><em>bool</em><em>]</em>) – This is an EXPERIMENTAL argument. An optional
-flag to enable wait for ready mechanism</p></li>
+flag to enable <a class="reference internal" href="glossary.html#term-wait_for_ready"><span class="xref std std-term">wait_for_ready</span></a> mechanism.</p></li>
 <li><p><strong>compression</strong> (<em>Optional</em><em>[</em><a class="reference internal" href="grpc.html#grpc.Compression" title="grpc.Compression"><em>grpc.Compression</em></a><em>]</em>) – An element of grpc.compression, e.g.
 grpc.compression.Gzip. This is an EXPERIMENTAL option.</p></li>
 </ul>
@@ -1498,7 +1403,7 @@ grpc.compression.Gzip. This is an EXPERIMENTAL option.</p></li>
 <dd><p>Enables asynchronous invocation of a server-streaming RPC.</p>
 <dl class="py method">
 <dt id="grpc.experimental.aio.UnaryStreamMultiCallable.__call__">
-<em class="property">abstract </em><code class="sig-name descname">__call__</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">request</span></em>, <em class="sig-param"><span class="o">*</span></em>, <em class="sig-param"><span class="n">timeout</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">metadata</span><span class="o">=</span><span class="default_value">()</span></em>, <em class="sig-param"><span class="n">credentials</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">wait_for_ready</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">compression</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_base_channel.html#UnaryStreamMultiCallable.__call__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.UnaryStreamMultiCallable.__call__" title="Permalink to this definition">¶</a></dt>
+<em class="property">abstract </em><code class="sig-name descname">__call__</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">request</span></em>, <em class="sig-param"><span class="o">*</span></em>, <em class="sig-param"><span class="n">timeout</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">metadata</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">credentials</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">wait_for_ready</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">compression</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_base_channel.html#UnaryStreamMultiCallable.__call__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.UnaryStreamMultiCallable.__call__" title="Permalink to this definition">¶</a></dt>
 <dd><p>Asynchronously invokes the underlying RPC.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters</dt>
@@ -1506,12 +1411,12 @@ grpc.compression.Gzip. This is an EXPERIMENTAL option.</p></li>
 <li><p><strong>request</strong> (<em>Any</em>) – The request value for the RPC.</p></li>
 <li><p><strong>timeout</strong> (<em>Optional</em><em>[</em><em>float</em><em>]</em>) – An optional duration of time in seconds to allow
 for the RPC.</p></li>
-<li><p><strong>metadata</strong> (<em>Optional</em><em>[</em><em>Sequence</em><em>[</em><em>Tuple</em><em>[</em><em>str</em><em>, </em><em>AnyStr</em><em>]</em><em>]</em><em>]</em>) – Optional <a class="reference internal" href="glossary.html#term-metadata"><span class="xref std std-term">metadata</span></a> to be transmitted to the
+<li><p><strong>metadata</strong> (<em>Optional</em><em>[</em><em>grpc.experimental.aio._metadata.Metadata</em><em>]</em>) – Optional <a class="reference internal" href="glossary.html#term-metadata"><span class="xref std std-term">metadata</span></a> to be transmitted to the
 service-side of the RPC.</p></li>
 <li><p><strong>credentials</strong> (<em>Optional</em><em>[</em><a class="reference internal" href="grpc.html#grpc.CallCredentials" title="grpc.CallCredentials"><em>grpc.CallCredentials</em></a><em>]</em>) – An optional CallCredentials for the RPC. Only valid for
 secure Channel.</p></li>
 <li><p><strong>wait_for_ready</strong> (<em>Optional</em><em>[</em><em>bool</em><em>]</em>) – This is an EXPERIMENTAL argument. An optional
-flag to enable wait for ready mechanism</p></li>
+flag to enable <a class="reference internal" href="glossary.html#term-wait_for_ready"><span class="xref std std-term">wait_for_ready</span></a> mechanism.</p></li>
 <li><p><strong>compression</strong> (<em>Optional</em><em>[</em><a class="reference internal" href="grpc.html#grpc.Compression" title="grpc.Compression"><em>grpc.Compression</em></a><em>]</em>) – An element of grpc.compression, e.g.
 grpc.compression.Gzip. This is an EXPERIMENTAL option.</p></li>
 </ul>
@@ -1538,21 +1443,21 @@ grpc.compression.Gzip. This is an EXPERIMENTAL option.</p></li>
 <dd><p>Enables asynchronous invocation of a client-streaming RPC.</p>
 <dl class="py method">
 <dt id="grpc.experimental.aio.StreamUnaryMultiCallable.__call__">
-<em class="property">abstract </em><code class="sig-name descname">__call__</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">request_iterator</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">timeout</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">metadata</span><span class="o">=</span><span class="default_value">()</span></em>, <em class="sig-param"><span class="n">credentials</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">wait_for_ready</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">compression</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_base_channel.html#StreamUnaryMultiCallable.__call__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.StreamUnaryMultiCallable.__call__" title="Permalink to this definition">¶</a></dt>
+<em class="property">abstract </em><code class="sig-name descname">__call__</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">request_iterator</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">timeout</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">metadata</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">credentials</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">wait_for_ready</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">compression</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_base_channel.html#StreamUnaryMultiCallable.__call__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.StreamUnaryMultiCallable.__call__" title="Permalink to this definition">¶</a></dt>
 <dd><p>Asynchronously invokes the underlying RPC.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters</dt>
 <dd class="field-odd"><ul class="simple">
-<li><p><strong>request_iterator</strong> (<em>Union</em><em>[</em><em>Iterable</em><em>[</em><em>Any</em><em>]</em><em>, </em><em>AsyncIterable</em><em>[</em><em>Any</em><em>]</em><em>, </em><em>None</em><em>]</em>) – An optional async iterable or iterable of request
+<li><p><strong>request_iterator</strong> (<em>Optional</em><em>[</em><em>Union</em><em>[</em><em>Iterable</em><em>[</em><em>Any</em><em>]</em><em>, </em><em>AsyncIterable</em><em>[</em><em>Any</em><em>]</em><em>]</em><em>]</em>) – An optional async iterable or iterable of request
 messages for the RPC.</p></li>
 <li><p><strong>timeout</strong> (<em>Optional</em><em>[</em><em>float</em><em>]</em>) – An optional duration of time in seconds to allow
 for the RPC.</p></li>
-<li><p><strong>metadata</strong> (<em>Optional</em><em>[</em><em>Sequence</em><em>[</em><em>Tuple</em><em>[</em><em>str</em><em>, </em><em>AnyStr</em><em>]</em><em>]</em><em>]</em>) – Optional <a class="reference internal" href="glossary.html#term-metadata"><span class="xref std std-term">metadata</span></a> to be transmitted to the
+<li><p><strong>metadata</strong> (<em>Optional</em><em>[</em><em>grpc.experimental.aio._metadata.Metadata</em><em>]</em>) – Optional <a class="reference internal" href="glossary.html#term-metadata"><span class="xref std std-term">metadata</span></a> to be transmitted to the
 service-side of the RPC.</p></li>
 <li><p><strong>credentials</strong> (<em>Optional</em><em>[</em><a class="reference internal" href="grpc.html#grpc.CallCredentials" title="grpc.CallCredentials"><em>grpc.CallCredentials</em></a><em>]</em>) – An optional CallCredentials for the RPC. Only valid for
 secure Channel.</p></li>
 <li><p><strong>wait_for_ready</strong> (<em>Optional</em><em>[</em><em>bool</em><em>]</em>) – This is an EXPERIMENTAL argument. An optional
-flag to enable wait for ready mechanism</p></li>
+flag to enable <a class="reference internal" href="glossary.html#term-wait_for_ready"><span class="xref std std-term">wait_for_ready</span></a> mechanism.</p></li>
 <li><p><strong>compression</strong> (<em>Optional</em><em>[</em><a class="reference internal" href="grpc.html#grpc.Compression" title="grpc.Compression"><em>grpc.Compression</em></a><em>]</em>) – An element of grpc.compression, e.g.
 grpc.compression.Gzip. This is an EXPERIMENTAL option.</p></li>
 </ul>
@@ -1579,21 +1484,21 @@ grpc.compression.Gzip. This is an EXPERIMENTAL option.</p></li>
 <dd><p>Enables asynchronous invocation of a bidirectional-streaming RPC.</p>
 <dl class="py method">
 <dt id="grpc.experimental.aio.StreamStreamMultiCallable.__call__">
-<em class="property">abstract </em><code class="sig-name descname">__call__</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">request_iterator</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">timeout</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">metadata</span><span class="o">=</span><span class="default_value">()</span></em>, <em class="sig-param"><span class="n">credentials</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">wait_for_ready</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">compression</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_base_channel.html#StreamStreamMultiCallable.__call__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.StreamStreamMultiCallable.__call__" title="Permalink to this definition">¶</a></dt>
+<em class="property">abstract </em><code class="sig-name descname">__call__</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">request_iterator</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">timeout</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">metadata</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">credentials</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">wait_for_ready</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">compression</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_base_channel.html#StreamStreamMultiCallable.__call__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.StreamStreamMultiCallable.__call__" title="Permalink to this definition">¶</a></dt>
 <dd><p>Asynchronously invokes the underlying RPC.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters</dt>
 <dd class="field-odd"><ul class="simple">
-<li><p><strong>request_iterator</strong> (<em>Union</em><em>[</em><em>Iterable</em><em>[</em><em>Any</em><em>]</em><em>, </em><em>AsyncIterable</em><em>[</em><em>Any</em><em>]</em><em>, </em><em>None</em><em>]</em>) – An optional async iterable or iterable of request
+<li><p><strong>request_iterator</strong> (<em>Optional</em><em>[</em><em>Union</em><em>[</em><em>Iterable</em><em>[</em><em>Any</em><em>]</em><em>, </em><em>AsyncIterable</em><em>[</em><em>Any</em><em>]</em><em>]</em><em>]</em>) – An optional async iterable or iterable of request
 messages for the RPC.</p></li>
 <li><p><strong>timeout</strong> (<em>Optional</em><em>[</em><em>float</em><em>]</em>) – An optional duration of time in seconds to allow
 for the RPC.</p></li>
-<li><p><strong>metadata</strong> (<em>Optional</em><em>[</em><em>Sequence</em><em>[</em><em>Tuple</em><em>[</em><em>str</em><em>, </em><em>AnyStr</em><em>]</em><em>]</em><em>]</em>) – Optional <a class="reference internal" href="glossary.html#term-metadata"><span class="xref std std-term">metadata</span></a> to be transmitted to the
+<li><p><strong>metadata</strong> (<em>Optional</em><em>[</em><em>grpc.experimental.aio._metadata.Metadata</em><em>]</em>) – Optional <a class="reference internal" href="glossary.html#term-metadata"><span class="xref std std-term">metadata</span></a> to be transmitted to the
 service-side of the RPC.</p></li>
 <li><p><strong>credentials</strong> (<em>Optional</em><em>[</em><a class="reference internal" href="grpc.html#grpc.CallCredentials" title="grpc.CallCredentials"><em>grpc.CallCredentials</em></a><em>]</em>) – An optional CallCredentials for the RPC. Only valid for
 secure Channel.</p></li>
 <li><p><strong>wait_for_ready</strong> (<em>Optional</em><em>[</em><em>bool</em><em>]</em>) – This is an EXPERIMENTAL argument. An optional
-flag to enable wait for ready mechanism</p></li>
+flag to enable <a class="reference internal" href="glossary.html#term-wait_for_ready"><span class="xref std std-term">wait_for_ready</span></a> mechanism.</p></li>
 <li><p><strong>compression</strong> (<em>Optional</em><em>[</em><a class="reference internal" href="grpc.html#grpc.Compression" title="grpc.Compression"><em>grpc.Compression</em></a><em>]</em>) – An element of grpc.compression, e.g.
 grpc.compression.Gzip. This is an EXPERIMENTAL option.</p></li>
 </ul>
@@ -1626,7 +1531,7 @@ grpc.compression.Gzip. This is an EXPERIMENTAL option.</p></li>
     <div class="clearer"></div>
   </div>
     <div class="footer">
-      &copy;2018, The gRPC Authors.
+      &copy;2020, The gRPC Authors.
       
       |
       <a href="_sources/grpc_asyncio.rst.txt"

+ 15 - 13
python/grpc_channelz.html

@@ -4,7 +4,8 @@
 <html lang="en">
   <head>
     <meta charset="utf-8" />
-    <title>gRPC Channelz &#8212; gRPC Python 1.29.0 documentation</title>
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>gRPC Channelz &#8212; 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>
@@ -31,7 +32,7 @@
 
 
 
-<p class="blurb">1.29.0</p>
+<p class="blurb">1.31.0</p>
 
 
 
@@ -101,47 +102,47 @@
 <p>Channelz debug service implementation in gRPC Python.</p>
 <dl class="py class">
 <dt id="grpc_channelz.v1.channelz.ChannelzServicer">
-<em class="property">class </em><code class="sig-prename descclassname">grpc_channelz.v1.channelz.</code><code class="sig-name descname">ChannelzServicer</code><a class="reference internal" href="_modules/grpc_channelz/v1/channelz.html#ChannelzServicer"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc_channelz.v1.channelz.ChannelzServicer" title="Permalink to this definition">¶</a></dt>
+<em class="property">class </em><code class="sig-prename descclassname">grpc_channelz.v1.channelz.</code><code class="sig-name descname">ChannelzServicer</code><a class="reference internal" href="_modules/grpc_channelz/v1/_servicer.html#ChannelzServicer"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc_channelz.v1.channelz.ChannelzServicer" title="Permalink to this definition">¶</a></dt>
 <dd><p>Servicer handling RPCs for service statuses.</p>
 <dl class="py method">
 <dt id="grpc_channelz.v1.channelz.ChannelzServicer.GetChannel">
-<em class="property">static </em><code class="sig-name descname">GetChannel</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">request</span></em>, <em class="sig-param"><span class="n">context</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc_channelz/v1/channelz.html#ChannelzServicer.GetChannel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc_channelz.v1.channelz.ChannelzServicer.GetChannel" title="Permalink to this definition">¶</a></dt>
+<em class="property">static </em><code class="sig-name descname">GetChannel</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">request</span></em>, <em class="sig-param"><span class="n">context</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc_channelz/v1/_servicer.html#ChannelzServicer.GetChannel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc_channelz.v1.channelz.ChannelzServicer.GetChannel" title="Permalink to this definition">¶</a></dt>
 <dd><p>Returns a single Channel, or else a NOT_FOUND code.</p>
 </dd></dl>
 
 <dl class="py method">
 <dt id="grpc_channelz.v1.channelz.ChannelzServicer.GetServer">
-<em class="property">static </em><code class="sig-name descname">GetServer</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">request</span></em>, <em class="sig-param"><span class="n">context</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc_channelz/v1/channelz.html#ChannelzServicer.GetServer"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc_channelz.v1.channelz.ChannelzServicer.GetServer" title="Permalink to this definition">¶</a></dt>
+<em class="property">static </em><code class="sig-name descname">GetServer</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">request</span></em>, <em class="sig-param"><span class="n">context</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc_channelz/v1/_servicer.html#ChannelzServicer.GetServer"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc_channelz.v1.channelz.ChannelzServicer.GetServer" title="Permalink to this definition">¶</a></dt>
 <dd><p>Returns a single Server, or else a NOT_FOUND code.</p>
 </dd></dl>
 
 <dl class="py method">
 <dt id="grpc_channelz.v1.channelz.ChannelzServicer.GetServerSockets">
-<em class="property">static </em><code class="sig-name descname">GetServerSockets</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">request</span></em>, <em class="sig-param"><span class="n">context</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc_channelz/v1/channelz.html#ChannelzServicer.GetServerSockets"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc_channelz.v1.channelz.ChannelzServicer.GetServerSockets" title="Permalink to this definition">¶</a></dt>
+<em class="property">static </em><code class="sig-name descname">GetServerSockets</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">request</span></em>, <em class="sig-param"><span class="n">context</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc_channelz/v1/_servicer.html#ChannelzServicer.GetServerSockets"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc_channelz.v1.channelz.ChannelzServicer.GetServerSockets" title="Permalink to this definition">¶</a></dt>
 <dd><p>Gets all server sockets that exist in the process.</p>
 </dd></dl>
 
 <dl class="py method">
 <dt id="grpc_channelz.v1.channelz.ChannelzServicer.GetServers">
-<em class="property">static </em><code class="sig-name descname">GetServers</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">request</span></em>, <em class="sig-param"><span class="n">context</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc_channelz/v1/channelz.html#ChannelzServicer.GetServers"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc_channelz.v1.channelz.ChannelzServicer.GetServers" title="Permalink to this definition">¶</a></dt>
+<em class="property">static </em><code class="sig-name descname">GetServers</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">request</span></em>, <em class="sig-param"><span class="n">context</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc_channelz/v1/_servicer.html#ChannelzServicer.GetServers"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc_channelz.v1.channelz.ChannelzServicer.GetServers" title="Permalink to this definition">¶</a></dt>
 <dd><p>Gets all servers that exist in the process.</p>
 </dd></dl>
 
 <dl class="py method">
 <dt id="grpc_channelz.v1.channelz.ChannelzServicer.GetSocket">
-<em class="property">static </em><code class="sig-name descname">GetSocket</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">request</span></em>, <em class="sig-param"><span class="n">context</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc_channelz/v1/channelz.html#ChannelzServicer.GetSocket"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc_channelz.v1.channelz.ChannelzServicer.GetSocket" title="Permalink to this definition">¶</a></dt>
+<em class="property">static </em><code class="sig-name descname">GetSocket</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">request</span></em>, <em class="sig-param"><span class="n">context</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc_channelz/v1/_servicer.html#ChannelzServicer.GetSocket"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc_channelz.v1.channelz.ChannelzServicer.GetSocket" title="Permalink to this definition">¶</a></dt>
 <dd><p>Returns a single Socket or else a NOT_FOUND code.</p>
 </dd></dl>
 
 <dl class="py method">
 <dt id="grpc_channelz.v1.channelz.ChannelzServicer.GetSubchannel">
-<em class="property">static </em><code class="sig-name descname">GetSubchannel</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">request</span></em>, <em class="sig-param"><span class="n">context</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc_channelz/v1/channelz.html#ChannelzServicer.GetSubchannel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc_channelz.v1.channelz.ChannelzServicer.GetSubchannel" title="Permalink to this definition">¶</a></dt>
+<em class="property">static </em><code class="sig-name descname">GetSubchannel</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">request</span></em>, <em class="sig-param"><span class="n">context</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc_channelz/v1/_servicer.html#ChannelzServicer.GetSubchannel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc_channelz.v1.channelz.ChannelzServicer.GetSubchannel" title="Permalink to this definition">¶</a></dt>
 <dd><p>Returns a single Subchannel, or else a NOT_FOUND code.</p>
 </dd></dl>
 
 <dl class="py method">
 <dt id="grpc_channelz.v1.channelz.ChannelzServicer.GetTopChannels">
-<em class="property">static </em><code class="sig-name descname">GetTopChannels</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">request</span></em>, <em class="sig-param"><span class="n">context</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc_channelz/v1/channelz.html#ChannelzServicer.GetTopChannels"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc_channelz.v1.channelz.ChannelzServicer.GetTopChannels" title="Permalink to this definition">¶</a></dt>
+<em class="property">static </em><code class="sig-name descname">GetTopChannels</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">request</span></em>, <em class="sig-param"><span class="n">context</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc_channelz/v1/_servicer.html#ChannelzServicer.GetTopChannels"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc_channelz.v1.channelz.ChannelzServicer.GetTopChannels" title="Permalink to this definition">¶</a></dt>
 <dd><p>Gets all root channels (i.e. channels the application has directly
 created). This does not include subchannels nor non-top level channels.</p>
 </dd></dl>
@@ -151,7 +152,8 @@ created). This does not include subchannels nor non-top level channels.</p>
 <dl class="py function">
 <dt id="grpc_channelz.v1.channelz.add_channelz_servicer">
 <code class="sig-prename descclassname">grpc_channelz.v1.channelz.</code><code class="sig-name descname">add_channelz_servicer</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">server</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc_channelz/v1/channelz.html#add_channelz_servicer"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc_channelz.v1.channelz.add_channelz_servicer" title="Permalink to this definition">¶</a></dt>
-<dd><p>Add Channelz servicer to a server. Channelz servicer is in charge of
+<dd><p>Add Channelz servicer to a server.</p>
+<p>Channelz servicer is in charge of
 pulling information from C-Core for entire process. It will allow the
 server to response to Channelz queries.</p>
 <p>The Channelz statistic is enabled by default inside C-Core. Whether the
@@ -163,7 +165,7 @@ and you can add Channelz servicer to a Channelz-disabled server.</p>
 <p>This is an EXPERIMENTAL API.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><p><strong>server</strong> – grpc.Server to which Channelz service will be added.</p>
+<dd class="field-odd"><p><strong>server</strong> – A gRPC server to which Channelz service will be added.</p>
 </dd>
 </dl>
 </dd></dl>
@@ -179,7 +181,7 @@ and you can add Channelz servicer to a Channelz-disabled server.</p>
     <div class="clearer"></div>
   </div>
     <div class="footer">
-      &copy;2018, The gRPC Authors.
+      &copy;2020, The gRPC Authors.
       
       |
       <a href="_sources/grpc_channelz.rst.txt"

+ 4 - 3
python/grpc_health_checking.html

@@ -4,7 +4,8 @@
 <html lang="en">
   <head>
     <meta charset="utf-8" />
-    <title>gRPC Health Checking &#8212; gRPC Python 1.29.0 documentation</title>
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>gRPC Health Checking &#8212; 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>
@@ -31,7 +32,7 @@
 
 
 
-<p class="blurb">1.29.0</p>
+<p class="blurb">1.31.0</p>
 
 
 
@@ -160,7 +161,7 @@ the service</p></li>
     <div class="clearer"></div>
   </div>
     <div class="footer">
-      &copy;2018, The gRPC Authors.
+      &copy;2020, The gRPC Authors.
       
       |
       <a href="_sources/grpc_health_checking.rst.txt"

+ 4 - 3
python/grpc_reflection.html

@@ -4,7 +4,8 @@
 <html lang="en">
   <head>
     <meta charset="utf-8" />
-    <title>gRPC Reflection &#8212; gRPC Python 1.29.0 documentation</title>
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>gRPC Reflection &#8212; 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>
@@ -31,7 +32,7 @@
 
 
 
-<p class="blurb">1.29.0</p>
+<p class="blurb">1.31.0</p>
 
 
 
@@ -143,7 +144,7 @@ all related requests go to a single server.</p>
     <div class="clearer"></div>
   </div>
     <div class="footer">
-      &copy;2018, The gRPC Authors.
+      &copy;2020, The gRPC Authors.
       
       |
       <a href="_sources/grpc_reflection.rst.txt"

+ 4 - 3
python/grpc_status.html

@@ -4,7 +4,8 @@
 <html lang="en">
   <head>
     <meta charset="utf-8" />
-    <title>gRPC Status &#8212; gRPC Python 1.29.0 documentation</title>
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>gRPC Status &#8212; 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>
@@ -31,7 +32,7 @@
 
 
 
-<p class="blurb">1.29.0</p>
+<p class="blurb">1.31.0</p>
 
 
 
@@ -140,7 +141,7 @@ to terminate the RPC with and communicate it to the client.</p>
     <div class="clearer"></div>
   </div>
     <div class="footer">
-      &copy;2018, The gRPC Authors.
+      &copy;2020, The gRPC Authors.
       
       |
       <a href="_sources/grpc_status.rst.txt"

+ 4 - 3
python/grpc_testing.html

@@ -4,7 +4,8 @@
 <html lang="en">
   <head>
     <meta charset="utf-8" />
-    <title>gRPC Testing &#8212; gRPC Python 1.29.0 documentation</title>
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>gRPC Testing &#8212; 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>
@@ -31,7 +32,7 @@
 
 
 
-<p class="blurb">1.29.0</p>
+<p class="blurb">1.31.0</p>
 
 
 
@@ -908,7 +909,7 @@ as having advanced beyond t.</p>
     <div class="clearer"></div>
   </div>
     <div class="footer">
-      &copy;2018, The gRPC Authors.
+      &copy;2020, The gRPC Authors.
       
       |
       <a href="_sources/grpc_testing.rst.txt"

+ 6 - 5
python/index.html

@@ -4,7 +4,8 @@
 <html lang="en">
   <head>
     <meta charset="utf-8" />
-    <title>Welcome to gRPC Python’s documentation! &#8212; gRPC Python 1.29.0 documentation</title>
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>Welcome to gRPC Python’s documentation! &#8212; 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>
@@ -30,7 +31,7 @@
 
 
 
-<p class="blurb">1.29.0</p>
+<p class="blurb">1.31.0</p>
 
 
 
@@ -86,7 +87,7 @@
             
   <div class="section" id="welcome-to-grpc-python-s-documentation">
 <h1>Welcome to gRPC Python’s documentation!<a class="headerlink" href="#welcome-to-grpc-python-s-documentation" title="Permalink to this headline">¶</a></h1>
-<p>Version: 1.29.0 Release: 1.29.0</p>
+<p>Version: 1.31.0 Release: 1.31.0</p>
 </div>
 <div class="section" id="api-reference">
 <h1>API Reference<a class="headerlink" href="#api-reference" title="Permalink to this headline">¶</a></h1>
@@ -127,8 +128,8 @@
 <li class="toctree-l1"><a class="reference internal" href="grpc_asyncio.html">gRPC AsyncIO API</a><ul>
 <li class="toctree-l2"><a class="reference internal" href="grpc_asyncio.html#overview">Overview</a></li>
 <li class="toctree-l2"><a class="reference internal" href="grpc_asyncio.html#caveats">Caveats</a></li>
+<li class="toctree-l2"><a class="reference internal" href="grpc_asyncio.html#blocking-code-in-asyncio">Blocking Code in AsyncIO</a></li>
 <li class="toctree-l2"><a class="reference internal" href="grpc_asyncio.html#module-contents">Module Contents</a><ul>
-<li class="toctree-l3"><a class="reference internal" href="grpc_asyncio.html#enable-asyncio-in-grpc">Enable AsyncIO in gRPC</a></li>
 <li class="toctree-l3"><a class="reference internal" href="grpc_asyncio.html#create-channel">Create Channel</a></li>
 <li class="toctree-l3"><a class="reference internal" href="grpc_asyncio.html#channel-object">Channel Object</a></li>
 <li class="toctree-l3"><a class="reference internal" href="grpc_asyncio.html#create-server">Create Server</a></li>
@@ -187,7 +188,7 @@
     <div class="clearer"></div>
   </div>
     <div class="footer">
-      &copy;2018, The gRPC Authors.
+      &copy;2020, The gRPC Authors.
       
       |
       <a href="_sources/index.rst.txt"

BIN
python/objects.inv


+ 4 - 3
python/py-modindex.html

@@ -4,7 +4,8 @@
 <html lang="en">
   <head>
     <meta charset="utf-8" />
-    <title>Python Module Index &#8212; gRPC Python 1.29.0 documentation</title>
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>Python Module Index &#8212; 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>
@@ -32,7 +33,7 @@
 
 
 
-<p class="blurb">1.29.0</p>
+<p class="blurb">1.31.0</p>
 
 
 
@@ -155,7 +156,7 @@
     <div class="clearer"></div>
   </div>
     <div class="footer">
-      &copy;2018, The gRPC Authors.
+      &copy;2020, The gRPC Authors.
       
     </div>
 

+ 4 - 3
python/search.html

@@ -4,7 +4,8 @@
 <html lang="en">
   <head>
     <meta charset="utf-8" />
-    <title>Search &#8212; gRPC Python 1.29.0 documentation</title>
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>Search &#8212; 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" />
     
@@ -34,7 +35,7 @@
 
 
 
-<p class="blurb">1.29.0</p>
+<p class="blurb">1.31.0</p>
 
 
 
@@ -106,7 +107,7 @@
     <div class="clearer"></div>
   </div>
     <div class="footer">
-      &copy;2018, The gRPC Authors.
+      &copy;2020, The gRPC Authors.
       
     </div>
 

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
python/searchindex.js


Некоторые файлы не были показаны из-за большого количества измененных файлов