Pārlūkot izejas kodu

Merge pull request #22586 from gnossen/1_28_1_documentation

Auto-update Python documentation for 1.28.1
Richard Belleville 5 gadi atpakaļ
vecāks
revīzija
65a64e9779
59 mainītis faili ar 6918 papildinājumiem un 2555 dzēšanām
  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. 32 24
      python/_modules/grpc.html
  13. 0 139
      python/_modules/grpc/_cython.html
  14. 354 0
      python/_modules/grpc/experimental/aio/_base_call.html
  15. 468 0
      python/_modules/grpc/experimental/aio/_base_channel.html
  16. 377 0
      python/_modules/grpc/experimental/aio/_base_server.html
  17. 729 0
      python/_modules/grpc/experimental/aio/_call.html
  18. 527 0
      python/_modules/grpc/experimental/aio/_channel.html
  19. 471 0
      python/_modules/grpc/experimental/aio/_interceptor.html
  20. 315 0
      python/_modules/grpc/experimental/aio/_server.html
  21. 27 30
      python/_modules/grpc_channelz/v1/channelz.html
  22. 26 22
      python/_modules/grpc_health/v1/health.html
  23. 23 29
      python/_modules/grpc_reflection/v1alpha/reflection.html
  24. 22 25
      python/_modules/grpc_status/rpc_status.html
  25. 13 16
      python/_modules/grpc_testing.html
  26. 21 17
      python/_modules/index.html
  27. 132 0
      python/_sources/grpc_asyncio.rst.txt
  28. 1 0
      python/_sources/index.rst.txt
  29. BIN
      python/_static/ajax-loader.gif
  30. 94 2
      python/_static/basic.css
  31. BIN
      python/_static/comment-bright.png
  32. BIN
      python/_static/comment-close.png
  33. BIN
      python/_static/comment.png
  34. 3 1
      python/_static/custom.css
  35. 6 6
      python/_static/doctools.js
  36. 3 2
      python/_static/documentation_options.js
  37. BIN
      python/_static/down-pressed.png
  38. BIN
      python/_static/down.png
  39. 287 244
      python/_static/jquery-3.4.1.js
  40. 0 1
      python/_static/jquery.js
  41. 1 1
      python/_static/language_data.js
  42. 54 23
      python/_static/searchtools.js
  43. BIN
      python/_static/up-pressed.png
  44. BIN
      python/_static/up.png
  45. 0 808
      python/_static/websupport.js
  46. 333 45
      python/genindex.html
  47. 19 22
      python/glossary.html
  48. 306 381
      python/grpc.html
  49. 1624 0
      python/grpc_asyncio.html
  50. 65 28
      python/grpc_channelz.html
  51. 49 31
      python/grpc_health_checking.html
  52. 30 30
      python/grpc_reflection.html
  53. 36 42
      python/grpc_status.html
  54. 393 523
      python/grpc_testing.html
  55. 36 20
      python/index.html
  56. BIN
      python/objects.inv
  57. 26 23
      python/py-modindex.html
  58. 14 19
      python/search.html
  59. 0 0
      python/searchindex.js

+ 1 - 1
python/.buildinfo

@@ -1,4 +1,4 @@
 # Sphinx build info version 1
 # 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.
 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
-config: b8fcfe7f61fa63edcbf8906be1c73923
+config: 7f14247b2a6f0e9766cfe5db4d34deb3
 tags: 645f666f9bcd5a90fca523b33c5a78b7
 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


+ 32 - 24
python/_modules/grpc.html

@@ -1,19 +1,17 @@
 
 
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!DOCTYPE html>
 
 
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
   <head>
   <head>
-    <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-    <title>grpc &#8212; gRPC Python 1.26.0 documentation</title>
+    <meta charset="utf-8" />
+    <title>grpc &#8212; gRPC Python 1.28.1 documentation</title>
     <link rel="stylesheet" href="../_static/alabaster.css" type="text/css" />
     <link rel="stylesheet" href="../_static/alabaster.css" type="text/css" />
     <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
     <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
-    <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
-    <script type="text/javascript" src="../_static/jquery.js"></script>
-    <script type="text/javascript" src="../_static/underscore.js"></script>
-    <script type="text/javascript" src="../_static/doctools.js"></script>
-    <script type="text/javascript" src="../_static/language_data.js"></script>
+    <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="index" title="Index" href="../genindex.html" />
     <link rel="search" title="Search" href="../search.html" />
     <link rel="search" title="Search" href="../search.html" />
    
    
@@ -31,7 +29,7 @@
 
 
 
 
 
 
-<p class="blurb">1.26.0</p>
+<p class="blurb">1.28.1</p>
 
 
 
 
 
 
@@ -42,6 +40,7 @@
 <p class="caption"><span class="caption-text">Contents:</span></p>
 <p class="caption"><span class="caption-text">Contents:</span></p>
 <ul>
 <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.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_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_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_reflection.html">gRPC Reflection</a></li>
@@ -60,17 +59,15 @@
 </ul>
 </ul>
 </div>
 </div>
 <div id="searchbox" style="display: none" role="search">
 <div id="searchbox" style="display: none" role="search">
-  <h3>Quick search</h3>
+  <h3 id="searchlabel">Quick search</h3>
     <div class="searchformwrapper">
     <div class="searchformwrapper">
     <form class="search" action="../search.html" method="get">
     <form class="search" action="../search.html" method="get">
-      <input type="text" name="q" />
+      <input type="text" name="q" aria-labelledby="searchlabel" />
       <input type="submit" value="Go" />
       <input type="submit" value="Go" />
-      <input type="hidden" name="check_keywords" value="yes" />
-      <input type="hidden" name="area" value="default" />
     </form>
     </form>
     </div>
     </div>
 </div>
 </div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
+<script>$('#searchbox').show(0);</script>
 
 
 
 
 
 
@@ -1252,7 +1249,13 @@
 
 
 <div class="viewcode-block" id="ServicerContext.set_trailing_metadata"><a class="viewcode-back" href="../grpc.html#grpc.ServicerContext.set_trailing_metadata">[docs]</a>    <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
 <div class="viewcode-block" id="ServicerContext.set_trailing_metadata"><a class="viewcode-back" href="../grpc.html#grpc.ServicerContext.set_trailing_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">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="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="sd">&quot;&quot;&quot;Sends the trailing metadata for the RPC.</span>
+        <span class="sd">&quot;&quot;&quot;Sets the trailing metadata for the RPC.</span>
+
+<span class="sd">        Sets the trailing metadata to be sent upon completion of the RPC.</span>
+
+<span class="sd">        If this method is invoked multiple times throughout the lifetime of an</span>
+<span class="sd">        RPC, the value supplied in the final invocation will be the value sent</span>
+<span class="sd">        over the wire.</span>
 
 
 <span class="sd">        This method need not be called by implementations if they have no</span>
 <span class="sd">        This method need not be called by implementations if they have no</span>
 <span class="sd">        metadata to add to what the gRPC runtime will transmit.</span>
 <span class="sd">        metadata to add to what the gRPC runtime will transmit.</span>
@@ -1673,7 +1676,7 @@
 <span class="sd">      private_key: The PEM-encoded private key as a byte string, or None if no</span>
 <span class="sd">      private_key: The PEM-encoded private key as a byte string, or None if no</span>
 <span class="sd">        private key should be used.</span>
 <span class="sd">        private key should be used.</span>
 <span class="sd">      certificate_chain: The PEM-encoded certificate chain as a byte string</span>
 <span class="sd">      certificate_chain: The PEM-encoded certificate chain as a byte string</span>
-<span class="sd">        to use or or None if no certificate chain should be used.</span>
+<span class="sd">        to use or None if no certificate chain should be used.</span>
 
 
 <span class="sd">    Returns:</span>
 <span class="sd">    Returns:</span>
 <span class="sd">      A ChannelCredentials for use with an SSL-enabled Channel.</span>
 <span class="sd">      A ChannelCredentials for use with an SSL-enabled Channel.</span>
@@ -1942,8 +1945,8 @@
 <span class="sd">      A Channel.</span>
 <span class="sd">      A Channel.</span>
 <span class="sd">    &quot;&quot;&quot;</span>
 <span class="sd">    &quot;&quot;&quot;</span>
     <span class="kn">from</span> <span class="nn">grpc</span> <span class="kn">import</span> <span class="n">_channel</span>  <span class="c1"># pylint: disable=cyclic-import</span>
     <span class="kn">from</span> <span class="nn">grpc</span> <span class="kn">import</span> <span class="n">_channel</span>  <span class="c1"># pylint: disable=cyclic-import</span>
-    <span class="k">return</span> <span class="n">_channel</span><span class="o">.</span><span class="n">Channel</span><span class="p">(</span><span class="n">target</span><span class="p">,</span> <span class="p">()</span>
-                            <span class="k">if</span> <span class="n">options</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">options</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">compression</span><span class="p">)</span></div>
+    <span class="k">return</span> <span class="n">_channel</span><span class="o">.</span><span class="n">Channel</span><span class="p">(</span><span class="n">target</span><span class="p">,</span> <span class="p">()</span> <span class="k">if</span> <span class="n">options</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">options</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span>
+                            <span class="n">compression</span><span class="p">)</span></div>
 
 
 
 
 <div class="viewcode-block" id="secure_channel"><a class="viewcode-back" href="../grpc.html#grpc.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="n">credentials</span><span class="p">,</span> <span class="n">options</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">compression</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.html#grpc.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="n">credentials</span><span class="p">,</span> <span class="n">options</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">compression</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
@@ -1963,6 +1966,11 @@
 <span class="sd">      A Channel.</span>
 <span class="sd">      A Channel.</span>
 <span class="sd">    &quot;&quot;&quot;</span>
 <span class="sd">    &quot;&quot;&quot;</span>
     <span class="kn">from</span> <span class="nn">grpc</span> <span class="kn">import</span> <span class="n">_channel</span>  <span class="c1"># pylint: disable=cyclic-import</span>
     <span class="kn">from</span> <span class="nn">grpc</span> <span class="kn">import</span> <span class="n">_channel</span>  <span class="c1"># pylint: disable=cyclic-import</span>
+    <span class="kn">from</span> <span class="nn">grpc.experimental</span> <span class="kn">import</span> <span class="n">_insecure_channel_credentials</span>
+    <span class="k">if</span> <span class="n">credentials</span><span class="o">.</span><span class="n">_credentials</span> <span class="ow">is</span> <span class="n">_insecure_channel_credentials</span><span class="p">:</span>
+        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
+            <span class="s2">&quot;secure_channel cannot be called with insecure credentials.&quot;</span> <span class="o">+</span>
+            <span class="s2">&quot; Call insecure_channel instead.&quot;</span><span class="p">)</span>
     <span class="k">return</span> <span class="n">_channel</span><span class="o">.</span><span class="n">Channel</span><span class="p">(</span><span class="n">target</span><span class="p">,</span> <span class="p">()</span> <span class="k">if</span> <span class="n">options</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">options</span><span class="p">,</span>
     <span class="k">return</span> <span class="n">_channel</span><span class="o">.</span><span class="n">Channel</span><span class="p">(</span><span class="n">target</span><span class="p">,</span> <span class="p">()</span> <span class="k">if</span> <span class="n">options</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">options</span><span class="p">,</span>
                             <span class="n">credentials</span><span class="o">.</span><span class="n">_credentials</span><span class="p">,</span> <span class="n">compression</span><span class="p">)</span></div>
                             <span class="n">credentials</span><span class="o">.</span><span class="n">_credentials</span><span class="p">,</span> <span class="n">compression</span><span class="p">)</span></div>
 
 
@@ -2026,10 +2034,10 @@
 <span class="sd">      A Server object.</span>
 <span class="sd">      A Server object.</span>
 <span class="sd">    &quot;&quot;&quot;</span>
 <span class="sd">    &quot;&quot;&quot;</span>
     <span class="kn">from</span> <span class="nn">grpc</span> <span class="kn">import</span> <span class="n">_server</span>  <span class="c1"># pylint: disable=cyclic-import</span>
     <span class="kn">from</span> <span class="nn">grpc</span> <span class="kn">import</span> <span class="n">_server</span>  <span class="c1"># pylint: disable=cyclic-import</span>
-    <span class="k">return</span> <span class="n">_server</span><span class="o">.</span><span class="n">create_server</span><span class="p">(</span><span class="n">thread_pool</span><span class="p">,</span> <span class="p">()</span>
-                                 <span class="k">if</span> <span class="n">handlers</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">handlers</span><span class="p">,</span> <span class="p">()</span>
-                                 <span class="k">if</span> <span class="n">interceptors</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">interceptors</span><span class="p">,</span> <span class="p">()</span>
-                                 <span class="k">if</span> <span class="n">options</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">options</span><span class="p">,</span>
+    <span class="k">return</span> <span class="n">_server</span><span class="o">.</span><span class="n">create_server</span><span class="p">(</span><span class="n">thread_pool</span><span class="p">,</span>
+                                 <span class="p">()</span> <span class="k">if</span> <span class="n">handlers</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">handlers</span><span class="p">,</span>
+                                 <span class="p">()</span> <span class="k">if</span> <span class="n">interceptors</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">interceptors</span><span class="p">,</span>
+                                 <span class="p">()</span> <span class="k">if</span> <span class="n">options</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">options</span><span class="p">,</span>
                                  <span class="n">maximum_concurrent_rpcs</span><span class="p">,</span> <span class="n">compression</span><span class="p">)</span></div>
                                  <span class="n">maximum_concurrent_rpcs</span><span class="p">,</span> <span class="n">compression</span><span class="p">)</span></div>
 
 
 
 

+ 0 - 139
python/_modules/grpc/_cython.html

@@ -1,139 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
-  <head>
-    <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-    <title>grpc._cython &#8212; gRPC Python 1.26.0 documentation</title>
-    <link rel="stylesheet" href="../../_static/alabaster.css" type="text/css" />
-    <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
-    <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
-    <script type="text/javascript" src="../../_static/jquery.js"></script>
-    <script type="text/javascript" src="../../_static/underscore.js"></script>
-    <script type="text/javascript" src="../../_static/doctools.js"></script>
-    <script type="text/javascript" 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.26.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_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>
-  <li><a href="../grpc.html">grpc</a><ul>
-  </ul></li>
-  </ul></li>
-  </ul></li>
-</ul>
-</div>
-<div id="searchbox" style="display: none" role="search">
-  <h3>Quick search</h3>
-    <div class="searchformwrapper">
-    <form class="search" action="../../search.html" method="get">
-      <input type="text" name="q" />
-      <input type="submit" value="Go" />
-      <input type="hidden" name="check_keywords" value="yes" />
-      <input type="hidden" name="area" value="default" />
-    </form>
-    </div>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
-
-
-
-
-
-
-
-
-        </div>
-      </div>
-      <div class="documentwrapper">
-        <div class="bodywrapper">
-          
-
-          <div class="body" role="main">
-            
-  <h1>Source code for grpc._cython</h1><div class="highlight"><pre>
-<span></span><span class="c1"># Copyright 2015 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>
-</pre></div>
-
-          </div>
-          
-        </div>
-      </div>
-    <div class="clearer"></div>
-  </div>
-    <div class="footer">
-      &copy;2018, 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>

+ 354 - 0
python/_modules/grpc/experimental/aio/_base_call.html

@@ -0,0 +1,354 @@
+
+<!DOCTYPE html>
+
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
+  <head>
+    <meta charset="utf-8" />
+    <title>grpc.experimental.aio._base_call &#8212; gRPC Python 1.28.1 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.28.1</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>
+  <li><a href="../../../grpc.html">grpc</a><ul>
+  </ul></li>
+  </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.experimental.aio._base_call</h1><div class="highlight"><pre>
+<span></span><span class="c1"># Copyright 2019 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;Abstract base classes for client-side Call objects.</span>
+
+<span class="sd">Call objects represents the RPC itself, and offer methods to access / modify</span>
+<span class="sd">its information. They also offer methods to manipulate the life-cycle of the</span>
+<span class="sd">RPC, e.g. cancellation.</span>
+<span class="sd">&quot;&quot;&quot;</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">AsyncIterable</span><span class="p">,</span> <span class="n">Awaitable</span><span class="p">,</span> <span class="n">Generic</span><span class="p">,</span> <span class="n">Optional</span><span class="p">,</span> <span class="n">Union</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="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="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>
+
+
+<div class="viewcode-block" id="RpcContext"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.RpcContext">[docs]</a><span class="k">class</span> <span class="nc">RpcContext</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;Provides RPC-related information and action.&quot;&quot;&quot;</span>
+
+<div class="viewcode-block" id="RpcContext.cancelled"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.RpcContext.cancelled">[docs]</a>    <span class="nd">@abstractmethod</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="sd">&quot;&quot;&quot;Return True if the RPC is cancelled.</span>
+
+<span class="sd">        The RPC is cancelled when the cancellation was requested with cancel().</span>
+
+<span class="sd">        Returns:</span>
+<span class="sd">          A bool indicates whether the RPC is cancelled or not.</span>
+<span class="sd">        &quot;&quot;&quot;</span></div>
+
+<div class="viewcode-block" id="RpcContext.done"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.RpcContext.done">[docs]</a>    <span class="nd">@abstractmethod</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="sd">&quot;&quot;&quot;Return True if the RPC is done.</span>
+
+<span class="sd">        An RPC is done if the RPC is completed, cancelled or aborted.</span>
+
+<span class="sd">        Returns:</span>
+<span class="sd">          A bool indicates if the RPC is done.</span>
+<span class="sd">        &quot;&quot;&quot;</span></div>
+
+<div class="viewcode-block" id="RpcContext.time_remaining"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.RpcContext.time_remaining">[docs]</a>    <span class="nd">@abstractmethod</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="sd">&quot;&quot;&quot;Describes the length of allowed time remaining for the RPC.</span>
+
+<span class="sd">        Returns:</span>
+<span class="sd">          A nonnegative float indicating the length of allowed time in seconds</span>
+<span class="sd">          remaining for the RPC to complete before it is considered to have</span>
+<span class="sd">          timed out, or None if no deadline was specified for the RPC.</span>
+<span class="sd">        &quot;&quot;&quot;</span></div>
+
+<div class="viewcode-block" id="RpcContext.cancel"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.RpcContext.cancel">[docs]</a>    <span class="nd">@abstractmethod</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="sd">&quot;&quot;&quot;Cancels the RPC.</span>
+
+<span class="sd">        Idempotent and has no effect if the RPC has already terminated.</span>
+
+<span class="sd">        Returns:</span>
+<span class="sd">          A bool indicates if the cancellation is performed or not.</span>
+<span class="sd">        &quot;&quot;&quot;</span></div>
+
+<div class="viewcode-block" id="RpcContext.add_done_callback"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.RpcContext.add_done_callback">[docs]</a>    <span class="nd">@abstractmethod</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="sd">&quot;&quot;&quot;Registers a callback to be called on RPC termination.</span>
+
+<span class="sd">        Args:</span>
+<span class="sd">          callback: A callable object will be called with the call object as</span>
+<span class="sd">          its only argument.</span>
+<span class="sd">        &quot;&quot;&quot;</span></div></div>
+
+
+<div class="viewcode-block" id="Call"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.Call">[docs]</a><span class="k">class</span> <span class="nc">Call</span><span class="p">(</span><span class="n">RpcContext</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;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="sd">&quot;&quot;&quot;Accesses the initial metadata sent by the server.</span>
+
+<span class="sd">        Returns:</span>
+<span class="sd">          The initial :term:`metadata`.</span>
+<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="sd">&quot;&quot;&quot;Accesses the trailing metadata sent by the server.</span>
+
+<span class="sd">        Returns:</span>
+<span class="sd">          The trailing :term:`metadata`.</span>
+<span class="sd">        &quot;&quot;&quot;</span></div>
+
+<div class="viewcode-block" id="Call.code"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.Call.code">[docs]</a>    <span class="nd">@abstractmethod</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="sd">&quot;&quot;&quot;Accesses the status code sent by the server.</span>
+
+<span class="sd">        Returns:</span>
+<span class="sd">          The StatusCode value for the RPC.</span>
+<span class="sd">        &quot;&quot;&quot;</span></div>
+
+<div class="viewcode-block" id="Call.details"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.Call.details">[docs]</a>    <span class="nd">@abstractmethod</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="sd">&quot;&quot;&quot;Accesses the details sent by the server.</span>
+
+<span class="sd">        Returns:</span>
+<span class="sd">          The details string of the RPC.</span>
+<span class="sd">        &quot;&quot;&quot;</span></div></div>
+
+
+<div class="viewcode-block" id="UnaryUnaryCall"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.UnaryUnaryCall">[docs]</a><span class="k">class</span> <span class="nc">UnaryUnaryCall</span><span class="p">(</span><span class="n">Generic</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">Call</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;The abstract base class of an unary-unary RPC on the client-side.&quot;&quot;&quot;</span>
+
+<div class="viewcode-block" id="UnaryUnaryCall.__await__"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.UnaryUnaryCall.__await__">[docs]</a>    <span class="nd">@abstractmethod</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="o">-&gt;</span> <span class="n">Awaitable</span><span class="p">[</span><span class="n">ResponseType</span><span class="p">]:</span>
+        <span class="sd">&quot;&quot;&quot;Await the response message to be ready.</span>
+
+<span class="sd">        Returns:</span>
+<span class="sd">          The response message of the RPC.</span>
+<span class="sd">        &quot;&quot;&quot;</span></div></div>
+
+
+<div class="viewcode-block" id="UnaryStreamCall"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.UnaryStreamCall">[docs]</a><span class="k">class</span> <span class="nc">UnaryStreamCall</span><span class="p">(</span><span class="n">Generic</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">Call</span><span class="p">,</span>
+                      <span class="n">metaclass</span><span class="o">=</span><span class="n">ABCMeta</span><span class="p">):</span>
+
+<div class="viewcode-block" id="UnaryStreamCall.__aiter__"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.UnaryStreamCall.__aiter__">[docs]</a>    <span class="nd">@abstractmethod</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="sd">&quot;&quot;&quot;Returns the async iterable representation that yields messages.</span>
+
+<span class="sd">        Under the hood, it is calling the &quot;read&quot; method.</span>
+
+<span class="sd">        Returns:</span>
+<span class="sd">          An async iterable object that yields messages.</span>
+<span class="sd">        &quot;&quot;&quot;</span></div>
+
+<div class="viewcode-block" id="UnaryStreamCall.read"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.UnaryStreamCall.read">[docs]</a>    <span class="nd">@abstractmethod</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">Union</span><span class="p">[</span><span class="n">EOFType</span><span class="p">,</span> <span class="n">ResponseType</span><span class="p">]:</span>
+        <span class="sd">&quot;&quot;&quot;Reads one message from the stream.</span>
+
+<span class="sd">        Read operations must be serialized when called from multiple</span>
+<span class="sd">        coroutines.</span>
+
+<span class="sd">        Returns:</span>
+<span class="sd">          A response message, or an `grpc.aio.EOF` to indicate the end of the</span>
+<span class="sd">          stream.</span>
+<span class="sd">        &quot;&quot;&quot;</span></div></div>
+
+
+<div class="viewcode-block" id="StreamUnaryCall"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.StreamUnaryCall">[docs]</a><span class="k">class</span> <span class="nc">StreamUnaryCall</span><span class="p">(</span><span class="n">Generic</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">Call</span><span class="p">,</span>
+                      <span class="n">metaclass</span><span class="o">=</span><span class="n">ABCMeta</span><span class="p">):</span>
+
+<div class="viewcode-block" id="StreamUnaryCall.write"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.StreamUnaryCall.write">[docs]</a>    <span class="nd">@abstractmethod</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="sd">&quot;&quot;&quot;Writes one message to the stream.</span>
+
+<span class="sd">        Raises:</span>
+<span class="sd">          An RpcError exception if the write failed.</span>
+<span class="sd">        &quot;&quot;&quot;</span></div>
+
+<div class="viewcode-block" id="StreamUnaryCall.done_writing"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.StreamUnaryCall.done_writing">[docs]</a>    <span class="nd">@abstractmethod</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;Notifies server that the client is done sending messages.</span>
+
+<span class="sd">        After done_writing is called, any additional invocation to the write</span>
+<span class="sd">        function will fail. This function is idempotent.</span>
+<span class="sd">        &quot;&quot;&quot;</span></div>
+
+<div class="viewcode-block" id="StreamUnaryCall.__await__"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.StreamUnaryCall.__await__">[docs]</a>    <span class="nd">@abstractmethod</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="o">-&gt;</span> <span class="n">Awaitable</span><span class="p">[</span><span class="n">ResponseType</span><span class="p">]:</span>
+        <span class="sd">&quot;&quot;&quot;Await the response message to be ready.</span>
+
+<span class="sd">        Returns:</span>
+<span class="sd">          The response message of the stream.</span>
+<span class="sd">        &quot;&quot;&quot;</span></div></div>
+
+
+<div class="viewcode-block" id="StreamStreamCall"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.StreamStreamCall">[docs]</a><span class="k">class</span> <span class="nc">StreamStreamCall</span><span class="p">(</span><span class="n">Generic</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">Call</span><span class="p">,</span>
+                       <span class="n">metaclass</span><span class="o">=</span><span class="n">ABCMeta</span><span class="p">):</span>
+
+<div class="viewcode-block" id="StreamStreamCall.__aiter__"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.StreamStreamCall.__aiter__">[docs]</a>    <span class="nd">@abstractmethod</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="sd">&quot;&quot;&quot;Returns the async iterable representation that yields messages.</span>
+
+<span class="sd">        Under the hood, it is calling the &quot;read&quot; method.</span>
+
+<span class="sd">        Returns:</span>
+<span class="sd">          An async iterable object that yields messages.</span>
+<span class="sd">        &quot;&quot;&quot;</span></div>
+
+<div class="viewcode-block" id="StreamStreamCall.read"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.StreamStreamCall.read">[docs]</a>    <span class="nd">@abstractmethod</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">Union</span><span class="p">[</span><span class="n">EOFType</span><span class="p">,</span> <span class="n">ResponseType</span><span class="p">]:</span>
+        <span class="sd">&quot;&quot;&quot;Reads one message from the stream.</span>
+
+<span class="sd">        Read operations must be serialized when called from multiple</span>
+<span class="sd">        coroutines.</span>
+
+<span class="sd">        Returns:</span>
+<span class="sd">          A response message, or an `grpc.aio.EOF` to indicate the end of the</span>
+<span class="sd">          stream.</span>
+<span class="sd">        &quot;&quot;&quot;</span></div>
+
+<div class="viewcode-block" id="StreamStreamCall.write"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.StreamStreamCall.write">[docs]</a>    <span class="nd">@abstractmethod</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="sd">&quot;&quot;&quot;Writes one message to the stream.</span>
+
+<span class="sd">        Raises:</span>
+<span class="sd">          An RpcError exception if the write failed.</span>
+<span class="sd">        &quot;&quot;&quot;</span></div>
+
+<div class="viewcode-block" id="StreamStreamCall.done_writing"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.StreamStreamCall.done_writing">[docs]</a>    <span class="nd">@abstractmethod</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;Notifies server that the client is done sending messages.</span>
+
+<span class="sd">        After done_writing is called, any additional invocation to the write</span>
+<span class="sd">        function will fail. This function is idempotent.</span>
+<span class="sd">        &quot;&quot;&quot;</span></div></div>
+</pre></div>
+
+          </div>
+          
+        </div>
+      </div>
+    <div class="clearer"></div>
+  </div>
+    <div class="footer">
+      &copy;2018, 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>

+ 468 - 0
python/_modules/grpc/experimental/aio/_base_channel.html

@@ -0,0 +1,468 @@
+
+<!DOCTYPE html>
+
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
+  <head>
+    <meta charset="utf-8" />
+    <title>grpc.experimental.aio._base_channel &#8212; gRPC Python 1.28.1 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.28.1</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>
+  <li><a href="../../../grpc.html">grpc</a><ul>
+  </ul></li>
+  </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.experimental.aio._base_channel</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;Abstract base classes for Channel objects and Multicallable objects.&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">Any</span><span class="p">,</span> <span class="n">AsyncIterable</span><span class="p">,</span> <span class="n">Optional</span>
+
+<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="n">DeserializingFunction</span><span class="p">,</span> <span class="n">MetadataType</span><span class="p">,</span> <span class="n">SerializingFunction</span>
+
+<span class="n">_IMMUTABLE_EMPTY_TUPLE</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">()</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>
+    <span class="sd">&quot;&quot;&quot;Enables asynchronous invocation of a unary-call RPC.&quot;&quot;&quot;</span>
+
+<div class="viewcode-block" id="UnaryUnaryMultiCallable.__call__"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.UnaryUnaryMultiCallable.__call__">[docs]</a>    <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
+    <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</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">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="sd">&quot;&quot;&quot;Asynchronously invokes the underlying RPC.</span>
+
+<span class="sd">        Args:</span>
+<span class="sd">          request: The request value for the RPC.</span>
+<span class="sd">          timeout: An optional duration of time in seconds to allow</span>
+<span class="sd">            for the RPC.</span>
+<span class="sd">          metadata: Optional :term:`metadata` to be transmitted to the</span>
+<span class="sd">            service-side of the RPC.</span>
+<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">          compression: An element of grpc.compression, e.g.</span>
+<span class="sd">            grpc.compression.Gzip. This is an EXPERIMENTAL option.</span>
+
+<span class="sd">        Returns:</span>
+<span class="sd">          A UnaryUnaryCall object.</span>
+
+<span class="sd">        Raises:</span>
+<span class="sd">          RpcError: Indicates that the RPC terminated with non-OK status. The</span>
+<span class="sd">            raised RpcError will also be a Call for the RPC affording the RPC&#39;s</span>
+<span class="sd">            metadata, status code, and details.</span>
+<span class="sd">        &quot;&quot;&quot;</span></div></div>
+
+
+<div class="viewcode-block" id="UnaryStreamMultiCallable"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.UnaryStreamMultiCallable">[docs]</a><span class="k">class</span> <span class="nc">UnaryStreamMultiCallable</span><span class="p">(</span><span class="n">abc</span><span class="o">.</span><span class="n">ABC</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;Enables asynchronous invocation of a server-streaming RPC.&quot;&quot;&quot;</span>
+
+<div class="viewcode-block" id="UnaryStreamMultiCallable.__call__"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.UnaryStreamMultiCallable.__call__">[docs]</a>    <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
+    <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</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">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="sd">&quot;&quot;&quot;Asynchronously invokes the underlying RPC.</span>
+
+<span class="sd">        Args:</span>
+<span class="sd">          request: The request value for the RPC.</span>
+<span class="sd">          timeout: An optional duration of time in seconds to allow</span>
+<span class="sd">            for the RPC.</span>
+<span class="sd">          metadata: Optional :term:`metadata` to be transmitted to the</span>
+<span class="sd">            service-side of the RPC.</span>
+<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">          compression: An element of grpc.compression, e.g.</span>
+<span class="sd">            grpc.compression.Gzip. This is an EXPERIMENTAL option.</span>
+
+<span class="sd">        Returns:</span>
+<span class="sd">          A UnaryStreamCall object.</span>
+
+<span class="sd">        Raises:</span>
+<span class="sd">          RpcError: Indicates that the RPC terminated with non-OK status. The</span>
+<span class="sd">            raised RpcError will also be a Call for the RPC affording the RPC&#39;s</span>
+<span class="sd">            metadata, status code, and details.</span>
+<span class="sd">        &quot;&quot;&quot;</span></div></div>
+
+
+<div class="viewcode-block" id="StreamUnaryMultiCallable"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.StreamUnaryMultiCallable">[docs]</a><span class="k">class</span> <span class="nc">StreamUnaryMultiCallable</span><span class="p">(</span><span class="n">abc</span><span class="o">.</span><span class="n">ABC</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;Enables asynchronous invocation of a client-streaming RPC.&quot;&quot;&quot;</span>
+
+<div class="viewcode-block" id="StreamUnaryMultiCallable.__call__"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.StreamUnaryMultiCallable.__call__">[docs]</a>    <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
+    <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_async_iterator</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">Any</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">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="sd">&quot;&quot;&quot;Asynchronously invokes the underlying RPC.</span>
+
+<span class="sd">        Args:</span>
+<span class="sd">          request: The request value for the RPC.</span>
+<span class="sd">          timeout: An optional duration of time in seconds to allow</span>
+<span class="sd">            for the RPC.</span>
+<span class="sd">          metadata: Optional :term:`metadata` to be transmitted to the</span>
+<span class="sd">            service-side of the RPC.</span>
+<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">          compression: An element of grpc.compression, e.g.</span>
+<span class="sd">            grpc.compression.Gzip. This is an EXPERIMENTAL option.</span>
+
+<span class="sd">        Returns:</span>
+<span class="sd">          A StreamUnaryCall object.</span>
+
+<span class="sd">        Raises:</span>
+<span class="sd">          RpcError: Indicates that the RPC terminated with non-OK status. The</span>
+<span class="sd">            raised RpcError will also be a Call for the RPC affording the RPC&#39;s</span>
+<span class="sd">            metadata, status code, and details.</span>
+<span class="sd">        &quot;&quot;&quot;</span></div></div>
+
+
+<div class="viewcode-block" id="StreamStreamMultiCallable"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.StreamStreamMultiCallable">[docs]</a><span class="k">class</span> <span class="nc">StreamStreamMultiCallable</span><span class="p">(</span><span class="n">abc</span><span class="o">.</span><span class="n">ABC</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;Enables asynchronous invocation of a bidirectional-streaming RPC.&quot;&quot;&quot;</span>
+
+<div class="viewcode-block" id="StreamStreamMultiCallable.__call__"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.StreamStreamMultiCallable.__call__">[docs]</a>    <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
+    <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_async_iterator</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">Any</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">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="sd">&quot;&quot;&quot;Asynchronously invokes the underlying RPC.</span>
+
+<span class="sd">        Args:</span>
+<span class="sd">          request: The request value for the RPC.</span>
+<span class="sd">          timeout: An optional duration of time in seconds to allow</span>
+<span class="sd">            for the RPC.</span>
+<span class="sd">          metadata: Optional :term:`metadata` to be transmitted to the</span>
+<span class="sd">            service-side of the RPC.</span>
+<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">          compression: An element of grpc.compression, e.g.</span>
+<span class="sd">            grpc.compression.Gzip. This is an EXPERIMENTAL option.</span>
+
+<span class="sd">        Returns:</span>
+<span class="sd">          A StreamStreamCall object.</span>
+
+<span class="sd">        Raises:</span>
+<span class="sd">          RpcError: Indicates that the RPC terminated with non-OK status. The</span>
+<span class="sd">            raised RpcError will also be a Call for the RPC affording the RPC&#39;s</span>
+<span class="sd">            metadata, status code, and details.</span>
+<span class="sd">        &quot;&quot;&quot;</span></div></div>
+
+
+<div class="viewcode-block" id="Channel"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.Channel">[docs]</a><span class="k">class</span> <span class="nc">Channel</span><span class="p">(</span><span class="n">abc</span><span class="o">.</span><span class="n">ABC</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;Enables asynchronous RPC invocation as a client.</span>
+
+<span class="sd">    Channel objects implement the Asynchronous Context Manager (aka. async</span>
+<span class="sd">    with) type, although they are not supportted to be entered and exited</span>
+<span class="sd">    multiple times.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+
+<div class="viewcode-block" id="Channel.__aenter__"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.Channel.__aenter__">[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="fm">__aenter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;Starts an asynchronous context manager.</span>
+
+<span class="sd">        Returns:</span>
+<span class="sd">          Channel the channel that was instantiated.</span>
+<span class="sd">        &quot;&quot;&quot;</span></div>
+
+<div class="viewcode-block" id="Channel.__aexit__"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.Channel.__aexit__">[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="fm">__aexit__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exc_type</span><span class="p">,</span> <span class="n">exc_val</span><span class="p">,</span> <span class="n">exc_tb</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;Finishes the asynchronous context manager by closing the channel.</span>
+
+<span class="sd">        Still active RPCs will be cancelled.</span>
+<span class="sd">        &quot;&quot;&quot;</span></div>
+
+<div class="viewcode-block" id="Channel.close"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.Channel.close">[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">close</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">grace</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="sd">&quot;&quot;&quot;Closes this Channel and releases all resources held by it.</span>
+
+<span class="sd">        This method immediately stops the channel from executing new RPCs in</span>
+<span class="sd">        all cases.</span>
+
+<span class="sd">        If a grace period is specified, this method wait until all active</span>
+<span class="sd">        RPCs are finshed, once the grace period is reached the ones that haven&#39;t</span>
+<span class="sd">        been terminated are cancelled. If a grace period is not specified</span>
+<span class="sd">        (by passing None for grace), all existing RPCs are cancelled immediately.</span>
+
+<span class="sd">        This method is idempotent.</span>
+<span class="sd">        &quot;&quot;&quot;</span></div>
+
+<div class="viewcode-block" id="Channel.get_state"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.Channel.get_state">[docs]</a>    <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
+    <span class="k">def</span> <span class="nf">get_state</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
+                  <span class="n">try_to_connect</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">grpc</span><span class="o">.</span><span class="n">ChannelConnectivity</span><span class="p">:</span>
+        <span class="sd">&quot;&quot;&quot;Checks the connectivity state of a channel.</span>
+
+<span class="sd">        This is an EXPERIMENTAL API.</span>
+
+<span class="sd">        If the channel reaches a stable connectivity state, it is guaranteed</span>
+<span class="sd">        that the return value of this function will eventually converge to that</span>
+<span class="sd">        state.</span>
+
+<span class="sd">        Args:</span>
+<span class="sd">          try_to_connect: a bool indicate whether the Channel should try to</span>
+<span class="sd">            connect to peer or not.</span>
+
+<span class="sd">        Returns: A ChannelConnectivity object.</span>
+<span class="sd">        &quot;&quot;&quot;</span></div>
+
+<div class="viewcode-block" id="Channel.wait_for_state_change"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.Channel.wait_for_state_change">[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">wait_for_state_change</span><span class="p">(</span>
+            <span class="bp">self</span><span class="p">,</span>
+            <span class="n">last_observed_state</span><span class="p">:</span> <span class="n">grpc</span><span class="o">.</span><span class="n">ChannelConnectivity</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="sd">&quot;&quot;&quot;Waits for a change in connectivity state.</span>
+
+<span class="sd">        This is an EXPERIMENTAL API.</span>
+
+<span class="sd">        The function blocks until there is a change in the channel connectivity</span>
+<span class="sd">        state from the &quot;last_observed_state&quot;. If the state is already</span>
+<span class="sd">        different, this function will return immediately.</span>
+
+<span class="sd">        There is an inherent race between the invocation of</span>
+<span class="sd">        &quot;Channel.wait_for_state_change&quot; and &quot;Channel.get_state&quot;. The state can</span>
+<span class="sd">        change arbitrary many times during the race, so there is no way to</span>
+<span class="sd">        observe every state transition.</span>
+
+<span class="sd">        If there is a need to put a timeout for this function, please refer to</span>
+<span class="sd">        &quot;asyncio.wait_for&quot;.</span>
+
+<span class="sd">        Args:</span>
+<span class="sd">          last_observed_state: A grpc.ChannelConnectivity object representing</span>
+<span class="sd">            the last known state.</span>
+<span class="sd">        &quot;&quot;&quot;</span></div>
+
+<div class="viewcode-block" id="Channel.channel_ready"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.Channel.channel_ready">[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">channel_ready</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;Creates a coroutine that blocks until the Channel is READY.&quot;&quot;&quot;</span></div>
+
+<div class="viewcode-block" id="Channel.unary_unary"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.Channel.unary_unary">[docs]</a>    <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
+    <span class="k">def</span> <span class="nf">unary_unary</span><span class="p">(</span>
+            <span class="bp">self</span><span class="p">,</span>
+            <span class="n">method</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
+            <span class="n">request_serializer</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">SerializingFunction</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+            <span class="n">response_deserializer</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">DeserializingFunction</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">UnaryUnaryMultiCallable</span><span class="p">:</span>
+        <span class="sd">&quot;&quot;&quot;Creates a UnaryUnaryMultiCallable for a unary-unary method.</span>
+
+<span class="sd">        Args:</span>
+<span class="sd">          method: The name of the RPC method.</span>
+<span class="sd">          request_serializer: Optional behaviour for serializing the request</span>
+<span class="sd">            message. Request goes unserialized in case None is passed.</span>
+<span class="sd">          response_deserializer: Optional behaviour for deserializing the</span>
+<span class="sd">            response message. Response goes undeserialized in case None</span>
+<span class="sd">            is passed.</span>
+
+<span class="sd">        Returns:</span>
+<span class="sd">          A UnaryUnaryMultiCallable value for the named unary-unary method.</span>
+<span class="sd">        &quot;&quot;&quot;</span></div>
+
+<div class="viewcode-block" id="Channel.unary_stream"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.Channel.unary_stream">[docs]</a>    <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
+    <span class="k">def</span> <span class="nf">unary_stream</span><span class="p">(</span>
+            <span class="bp">self</span><span class="p">,</span>
+            <span class="n">method</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
+            <span class="n">request_serializer</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">SerializingFunction</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+            <span class="n">response_deserializer</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">DeserializingFunction</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">UnaryStreamMultiCallable</span><span class="p">:</span>
+        <span class="sd">&quot;&quot;&quot;Creates a UnaryStreamMultiCallable for a unary-stream method.</span>
+
+<span class="sd">        Args:</span>
+<span class="sd">          method: The name of the RPC method.</span>
+<span class="sd">          request_serializer: Optional behaviour for serializing the request</span>
+<span class="sd">            message. Request goes unserialized in case None is passed.</span>
+<span class="sd">          response_deserializer: Optional behaviour for deserializing the</span>
+<span class="sd">            response message. Response goes undeserialized in case None</span>
+<span class="sd">            is passed.</span>
+
+<span class="sd">        Returns:</span>
+<span class="sd">          A UnarySteramMultiCallable value for the named unary-stream method.</span>
+<span class="sd">        &quot;&quot;&quot;</span></div>
+
+<div class="viewcode-block" id="Channel.stream_unary"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.Channel.stream_unary">[docs]</a>    <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</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>
+            <span class="n">method</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
+            <span class="n">request_serializer</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">SerializingFunction</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+            <span class="n">response_deserializer</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">DeserializingFunction</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">StreamUnaryMultiCallable</span><span class="p">:</span>
+        <span class="sd">&quot;&quot;&quot;Creates a StreamUnaryMultiCallable for a stream-unary method.</span>
+
+<span class="sd">        Args:</span>
+<span class="sd">          method: The name of the RPC method.</span>
+<span class="sd">          request_serializer: Optional behaviour for serializing the request</span>
+<span class="sd">            message. Request goes unserialized in case None is passed.</span>
+<span class="sd">          response_deserializer: Optional behaviour for deserializing the</span>
+<span class="sd">            response message. Response goes undeserialized in case None</span>
+<span class="sd">            is passed.</span>
+
+<span class="sd">        Returns:</span>
+<span class="sd">          A StreamUnaryMultiCallable value for the named stream-unary method.</span>
+<span class="sd">        &quot;&quot;&quot;</span></div>
+
+<div class="viewcode-block" id="Channel.stream_stream"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.Channel.stream_stream">[docs]</a>    <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</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>
+            <span class="n">method</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
+            <span class="n">request_serializer</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">SerializingFunction</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+            <span class="n">response_deserializer</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">DeserializingFunction</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">StreamStreamMultiCallable</span><span class="p">:</span>
+        <span class="sd">&quot;&quot;&quot;Creates a StreamStreamMultiCallable for a stream-stream method.</span>
+
+<span class="sd">        Args:</span>
+<span class="sd">          method: The name of the RPC method.</span>
+<span class="sd">          request_serializer: Optional behaviour for serializing the request</span>
+<span class="sd">            message. Request goes unserialized in case None is passed.</span>
+<span class="sd">          response_deserializer: Optional behaviour for deserializing the</span>
+<span class="sd">            response message. Response goes undeserialized in case None</span>
+<span class="sd">            is passed.</span>
+
+<span class="sd">        Returns:</span>
+<span class="sd">          A StreamStreamMultiCallable value for the named stream-stream method.</span>
+<span class="sd">        &quot;&quot;&quot;</span></div></div>
+</pre></div>
+
+          </div>
+          
+        </div>
+      </div>
+    <div class="clearer"></div>
+  </div>
+    <div class="footer">
+      &copy;2018, 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>

+ 377 - 0
python/_modules/grpc/experimental/aio/_base_server.html

@@ -0,0 +1,377 @@
+
+<!DOCTYPE html>
+
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
+  <head>
+    <meta charset="utf-8" />
+    <title>grpc.experimental.aio._base_server &#8212; gRPC Python 1.28.1 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.28.1</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>
+  <li><a href="../../../grpc.html">grpc</a><ul>
+  </ul></li>
+  </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.experimental.aio._base_server</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;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">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>
+
+
+<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>
+    <span class="sd">&quot;&quot;&quot;Serves RPCs.&quot;&quot;&quot;</span>
+
+<div class="viewcode-block" id="Server.add_generic_rpc_handlers"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.Server.add_generic_rpc_handlers">[docs]</a>    <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
+    <span class="k">def</span> <span class="nf">add_generic_rpc_handlers</span><span class="p">(</span>
+            <span class="bp">self</span><span class="p">,</span>
+            <span class="n">generic_rpc_handlers</span><span class="p">:</span> <span class="n">Sequence</span><span class="p">[</span><span class="n">grpc</span><span class="o">.</span><span class="n">GenericRpcHandler</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;Registers GenericRpcHandlers with this Server.</span>
+
+<span class="sd">        This method is only safe to call before the server is started.</span>
+
+<span class="sd">        Args:</span>
+<span class="sd">          generic_rpc_handlers: A sequence of GenericRpcHandlers that will be</span>
+<span class="sd">          used to service RPCs.</span>
+<span class="sd">        &quot;&quot;&quot;</span></div>
+
+<div class="viewcode-block" id="Server.add_insecure_port"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.Server.add_insecure_port">[docs]</a>    <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
+    <span class="k">def</span> <span class="nf">add_insecure_port</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">address</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
+        <span class="sd">&quot;&quot;&quot;Opens an insecure port for accepting RPCs.</span>
+
+<span class="sd">        A port is a communication endpoint that used by networking protocols,</span>
+<span class="sd">        like TCP and UDP. To date, we only support TCP.</span>
+
+<span class="sd">        This method may only be called before starting the server.</span>
+
+<span class="sd">        Args:</span>
+<span class="sd">          address: The address for which to open a port. If the port is 0,</span>
+<span class="sd">            or not specified in the address, then the gRPC runtime will choose a port.</span>
+
+<span class="sd">        Returns:</span>
+<span class="sd">          An integer port on which the server will accept RPC requests.</span>
+<span class="sd">        &quot;&quot;&quot;</span></div>
+
+<div class="viewcode-block" id="Server.add_secure_port"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.Server.add_secure_port">[docs]</a>    <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
+    <span class="k">def</span> <span class="nf">add_secure_port</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">address</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
+                        <span class="n">server_credentials</span><span class="p">:</span> <span class="n">grpc</span><span class="o">.</span><span class="n">ServerCredentials</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
+        <span class="sd">&quot;&quot;&quot;Opens a secure port for accepting RPCs.</span>
+
+<span class="sd">        A port is a communication endpoint that used by networking protocols,</span>
+<span class="sd">        like TCP and UDP. To date, we only support TCP.</span>
+
+<span class="sd">        This method may only be called before starting the server.</span>
+
+<span class="sd">        Args:</span>
+<span class="sd">          address: The address for which to open a port.</span>
+<span class="sd">            if the port is 0, or not specified in the address, then the gRPC</span>
+<span class="sd">            runtime will choose a port.</span>
+<span class="sd">          server_credentials: A ServerCredentials object.</span>
+
+<span class="sd">        Returns:</span>
+<span class="sd">          An integer port on which the server will accept RPC requests.</span>
+<span class="sd">        &quot;&quot;&quot;</span></div>
+
+<div class="viewcode-block" id="Server.start"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.Server.start">[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">start</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;Starts this Server.</span>
+
+<span class="sd">        This method may only be called once. (i.e. it is not idempotent).</span>
+<span class="sd">        &quot;&quot;&quot;</span></div>
+
+<div class="viewcode-block" id="Server.stop"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.Server.stop">[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">stop</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">grace</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">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+        <span class="sd">&quot;&quot;&quot;Stops this Server.</span>
+
+<span class="sd">        This method immediately stops the server from servicing new RPCs in</span>
+<span class="sd">        all cases.</span>
+
+<span class="sd">        If a grace period is specified, this method returns immediately and all</span>
+<span class="sd">        RPCs active at the end of the grace period are aborted. If a grace</span>
+<span class="sd">        period is not specified (by passing None for grace), all existing RPCs</span>
+<span class="sd">        are aborted immediately and this method blocks until the last RPC</span>
+<span class="sd">        handler terminates.</span>
+
+<span class="sd">        This method is idempotent and may be called at any time. Passing a</span>
+<span class="sd">        smaller grace value in a subsequent call will have the effect of</span>
+<span class="sd">        stopping the Server sooner (passing None will have the effect of</span>
+<span class="sd">        stopping the server immediately). Passing a larger grace value in a</span>
+<span class="sd">        subsequent call will not have the effect of stopping the server later</span>
+<span class="sd">        (i.e. the most restrictive grace value is used).</span>
+
+<span class="sd">        Args:</span>
+<span class="sd">          grace: A duration of time in seconds or None.</span>
+<span class="sd">        &quot;&quot;&quot;</span></div>
+
+<div class="viewcode-block" id="Server.wait_for_termination"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.Server.wait_for_termination">[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">wait_for_termination</span><span class="p">(</span><span class="bp">self</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="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+        <span class="sd">&quot;&quot;&quot;Continues current coroutine once the server stops.</span>
+
+<span class="sd">        This is an EXPERIMENTAL API.</span>
+
+<span class="sd">        The wait will not consume computational resources during blocking, and</span>
+<span class="sd">        it will block until one of the two following conditions are met:</span>
+
+<span class="sd">        1) The server is stopped or terminated;</span>
+<span class="sd">        2) A timeout occurs if timeout is not `None`.</span>
+
+<span class="sd">        The timeout argument works in the same way as `threading.Event.wait()`.</span>
+<span class="sd">        https://docs.python.org/3/library/threading.html#threading.Event.wait</span>
+
+<span class="sd">        Args:</span>
+<span class="sd">          timeout: A floating point number specifying a timeout for the</span>
+<span class="sd">            operation in seconds.</span>
+
+<span class="sd">        Returns:</span>
+<span class="sd">          A bool indicates if the operation times out.</span>
+<span class="sd">        &quot;&quot;&quot;</span></div></div>
+
+
+<div class="viewcode-block" id="ServicerContext"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.ServicerContext">[docs]</a><span class="k">class</span> <span class="nc">ServicerContext</span><span class="p">(</span><span class="n">Generic</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">abc</span><span class="o">.</span><span class="n">ABC</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;A context object passed to method implementations.&quot;&quot;&quot;</span>
+
+<div class="viewcode-block" id="ServicerContext.read"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.ServicerContext.read">[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">read</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">RequestType</span><span class="p">:</span>
+        <span class="sd">&quot;&quot;&quot;Reads one message from the RPC.</span>
+
+<span class="sd">        Only one read operation is allowed simultaneously.</span>
+
+<span class="sd">        Returns:</span>
+<span class="sd">          A response message of the RPC.</span>
+
+<span class="sd">        Raises:</span>
+<span class="sd">          An RpcError exception if the read failed.</span>
+<span class="sd">        &quot;&quot;&quot;</span></div>
+
+<div class="viewcode-block" id="ServicerContext.write"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.ServicerContext.write">[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">write</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</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="sd">&quot;&quot;&quot;Writes one message to the RPC.</span>
+
+<span class="sd">        Only one write operation is allowed simultaneously.</span>
+
+<span class="sd">        Raises:</span>
+<span class="sd">          An RpcError exception if the write failed.</span>
+<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="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>
+<span class="sd">        metadata to add to what the gRPC runtime will transmit.</span>
+
+<span class="sd">        Args:</span>
+<span class="sd">          initial_metadata: The initial :term:`metadata`.</span>
+<span class="sd">        &quot;&quot;&quot;</span></div>
+
+<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="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>
+<span class="sd">        ones.</span>
+
+<span class="sd">        Args:</span>
+<span class="sd">          code: A StatusCode object to be sent to the client.</span>
+<span class="sd">            It must not be StatusCode.OK.</span>
+<span class="sd">          details: A UTF-8-encodable string to be sent to the client upon</span>
+<span class="sd">            termination of the RPC.</span>
+<span class="sd">          trailing_metadata: A sequence of tuple represents the trailing</span>
+<span class="sd">            :term:`metadata`.</span>
+
+<span class="sd">        Raises:</span>
+<span class="sd">          Exception: An exception is always raised to signal the abortion the</span>
+<span class="sd">            RPC to the gRPC runtime.</span>
+<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="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>
+<span class="sd">        metadata to add to what the gRPC runtime will transmit.</span>
+
+<span class="sd">        Args:</span>
+<span class="sd">          trailing_metadata: The trailing :term:`metadata`.</span>
+<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="sd">&quot;&quot;&quot;Accesses the metadata from the sent by the client.</span>
+
+<span class="sd">        Returns:</span>
+<span class="sd">          The invocation :term:`metadata`.</span>
+<span class="sd">        &quot;&quot;&quot;</span></div>
+
+<div class="viewcode-block" id="ServicerContext.set_code"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.ServicerContext.set_code">[docs]</a>    <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
+    <span class="k">def</span> <span class="nf">set_code</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="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+        <span class="sd">&quot;&quot;&quot;Sets the value to be used as status code upon RPC completion.</span>
+
+<span class="sd">        This method need not be called by method implementations if they wish</span>
+<span class="sd">        the gRPC runtime to determine the status code of the RPC.</span>
+
+<span class="sd">        Args:</span>
+<span class="sd">          code: A StatusCode object to be sent to the client.</span>
+<span class="sd">        &quot;&quot;&quot;</span></div>
+
+<div class="viewcode-block" id="ServicerContext.set_details"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.ServicerContext.set_details">[docs]</a>    <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
+    <span class="k">def</span> <span class="nf">set_details</span><span class="p">(</span><span class="bp">self</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="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+        <span class="sd">&quot;&quot;&quot;Sets the value to be used the as detail string upon RPC completion.</span>
+
+<span class="sd">        This method need not be called by method implementations if they have</span>
+<span class="sd">        no details to transmit.</span>
+
+<span class="sd">        Args:</span>
+<span class="sd">          details: A UTF-8-encodable string to be sent to the client upon</span>
+<span class="sd">            termination of the RPC.</span>
+<span class="sd">        &quot;&quot;&quot;</span></div>
+
+<div class="viewcode-block" id="ServicerContext.set_compression"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.ServicerContext.set_compression">[docs]</a>    <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
+    <span class="k">def</span> <span class="nf">set_compression</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">compression</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">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+        <span class="sd">&quot;&quot;&quot;Set the compression algorithm to be used for the entire call.</span>
+
+<span class="sd">        This is an EXPERIMENTAL method.</span>
+
+<span class="sd">        Args:</span>
+<span class="sd">          compression: An element of grpc.compression, e.g.</span>
+<span class="sd">            grpc.compression.Gzip.</span>
+<span class="sd">        &quot;&quot;&quot;</span></div>
+
+<div class="viewcode-block" id="ServicerContext.disable_next_message_compression"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.ServicerContext.disable_next_message_compression">[docs]</a>    <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
+    <span class="k">def</span> <span class="nf">disable_next_message_compression</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;Disables compression for the next response message.</span>
+
+<span class="sd">        This is an EXPERIMENTAL method.</span>
+
+<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>
+</pre></div>
+
+          </div>
+          
+        </div>
+      </div>
+    <div class="clearer"></div>
+  </div>
+    <div class="footer">
+      &copy;2018, 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>

+ 729 - 0
python/_modules/grpc/experimental/aio/_call.html

@@ -0,0 +1,729 @@
+
+<!DOCTYPE html>
+
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
+  <head>
+    <meta charset="utf-8" />
+    <title>grpc.experimental.aio._call &#8212; gRPC Python 1.28.1 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.28.1</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>
+  <li><a href="../../../grpc.html">grpc</a><ul>
+  </ul></li>
+  </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.experimental.aio._call</h1><div class="highlight"><pre>
+<span></span><span class="c1"># Copyright 2019 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;Invocation-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">functools</span> <span class="kn">import</span> <span class="n">partial</span>
+<span class="kn">import</span> <span class="nn">logging</span>
+<span class="kn">import</span> <span class="nn">enum</span>
+<span class="kn">from</span> <span class="nn">typing</span> <span class="kn">import</span> <span class="n">AsyncIterable</span><span class="p">,</span> <span class="n">Awaitable</span><span class="p">,</span> <span class="n">Dict</span><span class="p">,</span> <span class="n">Optional</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="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">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>
+
+<span class="n">_LOCAL_CANCELLATION_DETAILS</span> <span class="o">=</span> <span class="s1">&#39;Locally cancelled by application!&#39;</span>
+<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">_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>
+                           <span class="s1">&#39;</span><span class="se">\t</span><span class="s1">details = &quot;</span><span class="si">{}</span><span class="s1">&quot;</span><span class="se">\n</span><span class="s1">&#39;</span>
+                           <span class="s1">&#39;&gt;&#39;</span><span class="p">)</span>
+
+<span class="n">_NON_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>
+                               <span class="s1">&#39;</span><span class="se">\t</span><span class="s1">details = &quot;</span><span class="si">{}</span><span class="s1">&quot;</span><span class="se">\n</span><span class="s1">&#39;</span>
+                               <span class="s1">&#39;</span><span class="se">\t</span><span class="s1">debug_error_string = &quot;</span><span class="si">{}</span><span class="s1">&quot;</span><span class="se">\n</span><span class="s1">&#39;</span>
+                               <span class="s1">&#39;&gt;&#39;</span><span class="p">)</span>
+
+<span class="n">_LOGGER</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="vm">__name__</span><span class="p">)</span>
+
+
+<div class="viewcode-block" id="AioRpcError"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.AioRpcError">[docs]</a><span class="k">class</span> <span class="nc">AioRpcError</span><span class="p">(</span><span class="n">grpc</span><span class="o">.</span><span class="n">RpcError</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;An implementation of RpcError to be used by the asynchronous API.</span>
+
+<span class="sd">    Raised RpcError is a snapshot of the final status of the RPC, values are</span>
+<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">_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">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>
+
+<span class="sd">        Args:</span>
+<span class="sd">          code: The status code with which the RPC has been finalized.</span>
+<span class="sd">          details: Optional details explaining the reason of the error.</span>
+<span class="sd">          initial_metadata: Optional initial metadata that could be sent by the</span>
+<span class="sd">            Server.</span>
+<span class="sd">          trailing_metadata: Optional metadata that could be sent by the Server.</span>
+<span class="sd">        &quot;&quot;&quot;</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="bp">self</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_code</span> <span class="o">=</span> <span class="n">code</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_details</span> <span class="o">=</span> <span class="n">details</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_initial_metadata</span> <span class="o">=</span> <span class="n">initial_metadata</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_trailing_metadata</span> <span class="o">=</span> <span class="n">trailing_metadata</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_debug_error_string</span> <span class="o">=</span> <span class="n">debug_error_string</span>
+
+<div class="viewcode-block" id="AioRpcError.code"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.AioRpcError.code">[docs]</a>    <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="sd">&quot;&quot;&quot;Accesses the status code sent by the server.</span>
+
+<span class="sd">        Returns:</span>
+<span class="sd">          The `grpc.StatusCode` status code.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_code</span></div>
+
+<div class="viewcode-block" id="AioRpcError.details"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.AioRpcError.details">[docs]</a>    <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="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+        <span class="sd">&quot;&quot;&quot;Accesses the details sent by the server.</span>
+
+<span class="sd">        Returns:</span>
+<span class="sd">          The description of the error.</span>
+<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">Dict</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>
+<span class="sd">          The initial metadata received.</span>
+<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">Dict</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>
+<span class="sd">          The trailing metadata received.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_trailing_metadata</span></div>
+
+<div class="viewcode-block" id="AioRpcError.debug_error_string"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.AioRpcError.debug_error_string">[docs]</a>    <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="nb">str</span><span class="p">:</span>
+        <span class="sd">&quot;&quot;&quot;Accesses the debug error string sent by the server.</span>
+
+<span class="sd">        Returns:</span>
+<span class="sd">          The debug error string received.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_debug_error_string</span></div>
+
+    <span class="k">def</span> <span class="nf">_repr</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;Assembles the error string for the RPC error.&quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="n">_NON_OK_CALL_REPRESENTATION</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</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">_code</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_details</span><span class="p">,</span>
+                                                  <span class="bp">self</span><span class="o">.</span><span class="n">_debug_error_string</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="fm">__repr__</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="bp">self</span><span class="o">.</span><span class="n">_repr</span><span class="p">()</span>
+
+    <span class="k">def</span> <span class="fm">__str__</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="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="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="p">)</span>
+
+
+<span class="k">class</span> <span class="nc">Call</span><span class="p">:</span>
+    <span class="sd">&quot;&quot;&quot;Base implementation of client RPC Call object.</span>
+
+<span class="sd">    Implements logic around 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">_code</span><span class="p">:</span> <span class="n">grpc</span><span class="o">.</span><span class="n">StatusCode</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="n">_metadata</span><span class="p">:</span> <span class="n">MetadataType</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="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="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">_cython_call</span> <span class="o">=</span> <span class="n">cython_call</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_metadata</span> <span class="o">=</span> <span class="n">metadata</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_request_serializer</span> <span class="o">=</span> <span class="n">request_serializer</span>
+        <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="k">def</span> <span class="fm">__del__</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"># The &#39;_cython_call&#39; object might be destructed before Call object</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;_cython_call&#39;</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">_cython_call</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">_cancel</span><span class="p">(</span><span class="n">_GC_CANCELLATION_DETAILS</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">_cython_call</span><span class="o">.</span><span class="n">cancelled</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="n">details</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+        <span class="sd">&quot;&quot;&quot;Forwards the application cancellation reasoning.&quot;&quot;&quot;</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cython_call</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">_cython_call</span><span class="o">.</span><span class="n">cancel</span><span class="p">(</span><span class="n">details</span><span class="p">)</span>
+            <span class="k">return</span> <span class="kc">True</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="k">return</span> <span class="kc">False</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">_cancel</span><span class="p">(</span><span class="n">_LOCAL_CANCELLATION_DETAILS</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">_cython_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="n">DoneCallbackType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+        <span class="n">cb</span> <span class="o">=</span> <span class="n">partial</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="bp">self</span><span class="o">.</span><span class="n">_cython_call</span><span class="o">.</span><span class="n">add_done_callback</span><span class="p">(</span><span class="n">cb</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">_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">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">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>
+        <span class="k">return</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">cygrpc_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="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">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="nb">str</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">debug_error_string</span><span class="p">()</span>
+
+    <span class="k">async</span> <span class="k">def</span> <span class="nf">_raise_for_status</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">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cython_call</span><span class="o">.</span><span class="n">is_locally_cancelled</span><span class="p">():</span>
+            <span class="k">raise</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">CancelledError</span><span class="p">()</span>
+        <span class="n">code</span> <span class="o">=</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">code</span><span class="p">()</span>
+        <span class="k">if</span> <span class="n">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">OK</span><span class="p">:</span>
+            <span class="k">raise</span> <span class="n">_create_rpc_error</span><span class="p">(</span><span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">initial_metadata</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="k">def</span> <span class="nf">_repr</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="nb">repr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_cython_call</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="fm">__repr__</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="bp">self</span><span class="o">.</span><span class="n">_repr</span><span class="p">()</span>
+
+    <span class="k">def</span> <span class="fm">__str__</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="bp">self</span><span class="o">.</span><span class="n">_repr</span><span class="p">()</span>
+
+
+<span class="k">class</span> <span class="nc">_APIStyle</span><span class="p">(</span><span class="n">enum</span><span class="o">.</span><span class="n">IntEnum</span><span class="p">):</span>
+    <span class="n">UNKNOWN</span> <span class="o">=</span> <span class="mi">0</span>
+    <span class="n">ASYNC_GENERATOR</span> <span class="o">=</span> <span class="mi">1</span>
+    <span class="n">READER_WRITER</span> <span class="o">=</span> <span class="mi">2</span>
+
+
+<span class="k">class</span> <span class="nc">_UnaryResponseMixin</span><span class="p">(</span><span class="n">Call</span><span class="p">):</span>
+    <span class="n">_call_response</span><span class="p">:</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">Task</span>
+
+    <span class="k">def</span> <span class="nf">_init_unary_response_mixin</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
+                                   <span class="n">response_coro</span><span class="p">:</span> <span class="n">Awaitable</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">_call_response</span> <span class="o">=</span> <span class="bp">self</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="n">response_coro</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>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_call_response</span><span class="o">.</span><span class="n">cancel</span><span class="p">()</span>
+            <span class="k">return</span> <span class="kc">True</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="k">return</span> <span class="kc">False</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="o">-&gt;</span> <span class="n">ResponseType</span><span class="p">:</span>
+        <span class="sd">&quot;&quot;&quot;Wait till the ongoing RPC request finishes.&quot;&quot;&quot;</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="n">response</span> <span class="o">=</span> <span class="k">yield from</span> <span class="bp">self</span><span class="o">.</span><span class="n">_call_response</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="c1"># Even if we caught all other CancelledError, there is still</span>
+            <span class="c1"># this corner case. If the application cancels immediately after</span>
+            <span class="c1"># the Call object is created, we will observe this</span>
+            <span class="c1"># `CancelledError`.</span>
+            <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">cancelled</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="k">raise</span>
+
+        <span class="c1"># NOTE(lidiz) If we raise RpcError in the task, and users doesn&#39;t</span>
+        <span class="c1"># &#39;await&#39; on it. AsyncIO will log &#39;Task exception was never retrieved&#39;.</span>
+        <span class="c1"># Instead, if we move the exception raising here, the spam stops.</span>
+        <span class="c1"># Unfortunately, there can only be one &#39;yield from&#39; in &#39;__await__&#39;. So,</span>
+        <span class="c1"># we need to access the private instance variable.</span>
+        <span class="k">if</span> <span class="n">response</span> <span class="ow">is</span> <span class="n">cygrpc</span><span class="o">.</span><span class="n">EOF</span><span class="p">:</span>
+            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cython_call</span><span class="o">.</span><span class="n">is_locally_cancelled</span><span class="p">():</span>
+                <span class="k">raise</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">CancelledError</span><span class="p">()</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="k">raise</span> <span class="n">_create_rpc_error</span><span class="p">(</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="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="k">else</span><span class="p">:</span>
+            <span class="k">return</span> <span class="n">response</span>
+
+
+<span class="k">class</span> <span class="nc">_StreamResponseMixin</span><span class="p">(</span><span class="n">Call</span><span class="p">):</span>
+    <span class="n">_message_aiter</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="n">_preparation</span><span class="p">:</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">Task</span>
+    <span class="n">_response_style</span><span class="p">:</span> <span class="n">_APIStyle</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="n">preparation</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="bp">self</span><span class="o">.</span><span class="n">_message_aiter</span> <span class="o">=</span> <span class="kc">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_preparation</span> <span class="o">=</span> <span class="n">preparation</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_response_style</span> <span class="o">=</span> <span class="n">_APIStyle</span><span class="o">.</span><span class="n">UNKNOWN</span>
+
+    <span class="k">def</span> <span class="nf">_update_response_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">_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">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>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_preparation</span><span class="o">.</span><span class="n">cancel</span><span class="p">()</span>
+            <span class="k">return</span> <span class="kc">True</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="k">return</span> <span class="kc">False</span>
+
+    <span class="k">async</span> <span class="k">def</span> <span class="nf">_fetch_stream_responses</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">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="k">while</span> <span class="n">message</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">cygrpc</span><span class="o">.</span><span class="n">EOF</span><span class="p">:</span>
+            <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="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>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_message_aiter</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_fetch_stream_responses</span><span class="p">()</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_message_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="c1"># Wait for the request being sent</span>
+        <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">_preparation</span>
+
+        <span class="c1"># Reads response message from Core</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="n">raw_response</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">receive_serialized_message</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>
+            <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">cancelled</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="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">if</span> <span class="n">raw_response</span> <span class="ow">is</span> <span class="n">cygrpc</span><span class="o">.</span><span class="n">EOF</span><span class="p">:</span>
+            <span class="k">return</span> <span class="n">cygrpc</span><span class="o">.</span><span class="n">EOF</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="k">return</span> <span class="n">_common</span><span class="o">.</span><span class="n">deserialize</span><span class="p">(</span><span class="n">raw_response</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="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">done</span><span class="p">():</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">return</span> <span class="n">cygrpc</span><span class="o">.</span><span class="n">EOF</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">READER_WRITER</span><span class="p">)</span>
+
+        <span class="n">response_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="k">if</span> <span class="n">response_message</span> <span class="ow">is</span> <span class="n">cygrpc</span><span class="o">.</span><span class="n">EOF</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">return</span> <span class="n">response_message</span>
+
+
+<span class="k">class</span> <span class="nc">_StreamRequestMixin</span><span class="p">(</span><span class="n">Call</span><span class="p">):</span>
+    <span class="n">_metadata_sent</span><span class="p">:</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">Event</span>
+    <span class="n">_done_writing_flag</span><span class="p">:</span> <span class="nb">bool</span>
+    <span class="n">_async_request_poller</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">Task</span><span class="p">]</span>
+    <span class="n">_request_style</span><span class="p">:</span> <span class="n">_APIStyle</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_async_iterator</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="bp">self</span><span class="o">.</span><span class="n">_metadata_sent</span> <span class="o">=</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">Event</span><span class="p">(</span><span class="n">loop</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_loop</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_done_writing_flag</span> <span class="o">=</span> <span class="kc">False</span>
+
+        <span class="c1"># If user passes in an async iterator, create a consumer Task.</span>
+        <span class="k">if</span> <span class="n">request_async_iterator</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_async_request_poller</span> <span class="o">=</span> <span class="bp">self</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">_consume_request_iterator</span><span class="p">(</span><span class="n">request_async_iterator</span><span class="p">))</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_request_style</span> <span class="o">=</span> <span class="n">_APIStyle</span><span class="o">.</span><span class="n">ASYNC_GENERATOR</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_async_request_poller</span> <span class="o">=</span> <span class="kc">None</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_request_style</span> <span class="o">=</span> <span class="n">_APIStyle</span><span class="o">.</span><span class="n">READER_WRITER</span>
+
+    <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">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>
+            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_async_request_poller</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">_async_request_poller</span><span class="o">.</span><span class="n">cancel</span><span class="p">()</span>
+            <span class="k">return</span> <span class="kc">True</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="k">return</span> <span class="kc">False</span>
+
+    <span class="k">def</span> <span class="nf">_metadata_sent_observer</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">_metadata_sent</span><span class="o">.</span><span class="n">set</span><span class="p">()</span>
+
+    <span class="k">async</span> <span class="k">def</span> <span class="nf">_consume_request_iterator</span><span class="p">(</span>
+            <span class="bp">self</span><span class="p">,</span> <span class="n">request_async_iterator</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="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+        <span class="k">try</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_async_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">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">_done_writing</span><span class="p">()</span>
+        <span class="k">except</span> <span class="n">AioRpcError</span> <span class="k">as</span> <span class="n">rpc_error</span><span class="p">:</span>
+            <span class="c1"># Rpc status should be exposed through other API. Exceptions raised</span>
+            <span class="c1"># within this Task won&#39;t be retrieved by another coroutine. It&#39;s</span>
+            <span class="c1"># better to suppress the error than spamming users&#39; screen.</span>
+            <span class="n">_LOGGER</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s1">&#39;Exception while consuming the request_iterator: </span><span class="si">%s</span><span class="s1">&#39;</span><span class="p">,</span>
+                          <span class="n">rpc_error</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="k">if</span> <span class="bp">self</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">if</span> <span class="bp">self</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="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_metadata_sent</span><span class="o">.</span><span class="n">is_set</span><span class="p">():</span>
+            <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">_metadata_sent</span><span class="o">.</span><span class="n">wait</span><span class="p">()</span>
+            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">done</span><span class="p">():</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="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>
+            <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">cancelled</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="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">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="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">done</span><span class="p">():</span>
+            <span class="c1"># If the RPC is finished, do nothing.</span>
+            <span class="k">return</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_done_writing_flag</span><span class="p">:</span>
+            <span class="c1"># If the done writing is not sent before, try to send it.</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_done_writing_flag</span> <span class="o">=</span> <span class="kc">True</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_receive_close</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>
+                <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">cancelled</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="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">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="bp">self</span><span class="o">.</span><span class="n">_raise_for_different_style</span><span class="p">(</span><span class="n">_APIStyle</span><span class="o">.</span><span class="n">READER_WRITER</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">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="bp">self</span><span class="o">.</span><span class="n">_raise_for_different_style</span><span class="p">(</span><span class="n">_APIStyle</span><span class="o">.</span><span class="n">READER_WRITER</span><span class="p">)</span>
+        <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">_done_writing</span><span class="p">()</span>
+
+
+<span class="k">class</span> <span class="nc">UnaryUnaryCall</span><span class="p">(</span><span class="n">_UnaryResponseMixin</span><span class="p">,</span> <span class="n">Call</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;Object for managing unary-unary RPC calls.</span>
+
+<span class="sd">    Returned when an instance of `UnaryUnaryMultiCallable` object is called.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">_request</span><span class="p">:</span> <span class="n">RequestType</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">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">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="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span>
+            <span class="n">channel</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">method</span><span class="p">,</span> <span class="n">deadline</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">metadata</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="n">loop</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_request</span> <span class="o">=</span> <span class="n">request</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_init_unary_response_mixin</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="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="o">-&gt;</span> <span class="n">ResponseType</span><span class="p">:</span>
+        <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="bp">self</span><span class="o">.</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="c1"># NOTE(lidiz) asyncio.CancelledError is not a good transport for status,</span>
+        <span class="c1"># because the asyncio.Task class do not cache the exception object.</span>
+        <span class="c1"># https://github.com/python/cpython/blob/edad4d89e357c92f70c0324b937845d652b20afd/Lib/asyncio/tasks.py#L785</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="n">serialized_response</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">unary_unary</span><span class="p">(</span>
+                <span class="n">serialized_request</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_metadata</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>
+            <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">cancelled</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="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cython_call</span><span class="o">.</span><span class="n">is_ok</span><span class="p">():</span>
+            <span class="k">return</span> <span class="n">_common</span><span class="o">.</span><span class="n">deserialize</span><span class="p">(</span><span class="n">serialized_response</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="k">else</span><span class="p">:</span>
+            <span class="k">return</span> <span class="n">cygrpc</span><span class="o">.</span><span class="n">EOF</span>
+
+
+<span class="k">class</span> <span class="nc">UnaryStreamCall</span><span class="p">(</span><span class="n">_StreamResponseMixin</span><span class="p">,</span> <span class="n">Call</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;Object for managing unary-stream RPC calls.</span>
+
+<span class="sd">    Returned when an instance of `UnaryStreamMultiCallable` object is called.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">_request</span><span class="p">:</span> <span class="n">RequestType</span>
+    <span class="n">_send_unary_request_task</span><span class="p">:</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">Task</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">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">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="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span>
+            <span class="n">channel</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">method</span><span class="p">,</span> <span class="n">deadline</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">metadata</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="n">loop</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_request</span> <span class="o">=</span> <span class="n">request</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_send_unary_request_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">_send_unary_request</span><span class="p">())</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">_send_unary_request_task</span><span class="p">)</span>
+
+    <span class="k">async</span> <span class="k">def</span> <span class="nf">_send_unary_request</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">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="bp">self</span><span class="o">.</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">initiate_unary_stream</span><span class="p">(</span>
+                <span class="n">serialized_request</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_metadata</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>
+            <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">cancelled</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="k">raise</span>
+
+
+<span class="k">class</span> <span class="nc">StreamUnaryCall</span><span class="p">(</span><span class="n">_StreamRequestMixin</span><span class="p">,</span> <span class="n">_UnaryResponseMixin</span><span class="p">,</span> <span class="n">Call</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;Object for managing stream-unary RPC calls.</span>
+
+<span class="sd">    Returned when an instance of `StreamUnaryMultiCallable` object is called.</span>
+<span class="sd">    &quot;&quot;&quot;</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">request_async_iterator</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">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">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="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span>
+            <span class="n">channel</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">method</span><span class="p">,</span> <span class="n">deadline</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">metadata</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="n">loop</span><span class="p">)</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_async_iterator</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_init_unary_response_mixin</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_conduct_rpc</span><span class="p">())</span>
+
+    <span class="k">async</span> <span class="k">def</span> <span class="nf">_conduct_rpc</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">try</span><span class="p">:</span>
+            <span class="n">serialized_response</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">stream_unary</span><span class="p">(</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">_metadata</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_metadata_sent_observer</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>
+            <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">cancelled</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="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cython_call</span><span class="o">.</span><span class="n">is_ok</span><span class="p">():</span>
+            <span class="k">return</span> <span class="n">_common</span><span class="o">.</span><span class="n">deserialize</span><span class="p">(</span><span class="n">serialized_response</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="k">else</span><span class="p">:</span>
+            <span class="k">return</span> <span class="n">cygrpc</span><span class="o">.</span><span class="n">EOF</span>
+
+
+<span class="k">class</span> <span class="nc">StreamStreamCall</span><span class="p">(</span><span class="n">_StreamRequestMixin</span><span class="p">,</span> <span class="n">_StreamResponseMixin</span><span class="p">,</span> <span class="n">Call</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;Object for managing stream-stream RPC calls.</span>
+
+<span class="sd">    Returned when an instance of `StreamStreamMultiCallable` object is called.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">_initializer</span><span class="p">:</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">Task</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">request_async_iterator</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">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">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="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span>
+            <span class="n">channel</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">method</span><span class="p">,</span> <span class="n">deadline</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">metadata</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="n">loop</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_initializer</span> <span class="o">=</span> <span class="bp">self</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">_prepare_rpc</span><span class="p">())</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_async_iterator</span><span class="p">)</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">_initializer</span><span class="p">)</span>
+
+    <span class="k">async</span> <span class="k">def</span> <span class="nf">_prepare_rpc</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;This method prepares the RPC for receiving/sending messages.</span>
+
+<span class="sd">        All other operations around the stream should only happen after the</span>
+<span class="sd">        completion of this method.</span>
+<span class="sd">        &quot;&quot;&quot;</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">initiate_stream_stream</span><span class="p">(</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">_metadata</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_metadata_sent_observer</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>
+            <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">cancelled</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"># No need to raise RpcError here, because no one will `await` this task.</span>
+</pre></div>
+
+          </div>
+          
+        </div>
+      </div>
+    <div class="clearer"></div>
+  </div>
+    <div class="footer">
+      &copy;2018, 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>

+ 527 - 0
python/_modules/grpc/experimental/aio/_channel.html

@@ -0,0 +1,527 @@
+
+<!DOCTYPE html>
+
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
+  <head>
+    <meta charset="utf-8" />
+    <title>grpc.experimental.aio._channel &#8212; gRPC Python 1.28.1 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.28.1</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>
+  <li><a href="../../../grpc.html">grpc</a><ul>
+  </ul></li>
+  </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.experimental.aio._channel</h1><div class="highlight"><pre>
+<span></span><span class="c1"># Copyright 2019 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;Invocation-side implementation of gRPC Asyncio Python.&quot;&quot;&quot;</span>
+
+<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">AsyncIterable</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">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>
+<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="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="n">SerializingFunction</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>
+
+    <span class="k">def</span> <span class="nf">_all_tasks</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">Iterable</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="k">return</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">Task</span><span class="o">.</span><span class="n">all_tasks</span><span class="p">()</span>
+<span class="k">else</span><span class="p">:</span>
+
+    <span class="k">def</span> <span class="nf">_all_tasks</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">Iterable</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="k">return</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">all_tasks</span><span class="p">()</span>
+
+
+<span class="k">def</span> <span class="nf">_augment_channel_arguments</span><span class="p">(</span><span class="n">base_options</span><span class="p">:</span> <span class="n">ChannelArgumentType</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">compression_channel_argument</span> <span class="o">=</span> <span class="n">_compression</span><span class="o">.</span><span class="n">create_channel_option</span><span class="p">(</span>
+        <span class="n">compression</span><span class="p">)</span>
+    <span class="n">user_agent_channel_argument</span> <span class="o">=</span> <span class="p">((</span>
+        <span class="n">cygrpc</span><span class="o">.</span><span class="n">ChannelArgKey</span><span class="o">.</span><span class="n">primary_user_agent_string</span><span class="p">,</span>
+        <span class="n">_USER_AGENT</span><span class="p">,</span>
+    <span class="p">),)</span>
+    <span class="k">return</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">base_options</span>
+                <span class="p">)</span> <span class="o">+</span> <span class="n">compression_channel_argument</span> <span class="o">+</span> <span class="n">user_agent_channel_argument</span>
+
+
+<span class="k">class</span> <span class="nc">_BaseMultiCallable</span><span class="p">:</span>
+    <span class="sd">&quot;&quot;&quot;Base class of all multi callable objects.</span>
+
+<span class="sd">    Handles the initialization logic and stores common attributes.</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">_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">_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>
+    <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">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">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">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>
+        <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">_method</span> <span class="o">=</span> <span class="n">method</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_request_serializer</span> <span class="o">=</span> <span class="n">request_serializer</span>
+        <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="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>
+
+    <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</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">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="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>
+                                  <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">InterceptedUnaryUnaryCall</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">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="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>
+
+
+<span class="k">class</span> <span class="nc">UnaryStreamMultiCallable</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">UnaryStreamMultiCallable</span><span class="p">):</span>
+
+    <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</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">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">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">return</span> <span class="n">call</span>
+
+
+<span class="k">class</span> <span class="nc">StreamUnaryMultiCallable</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">StreamUnaryMultiCallable</span><span class="p">):</span>
+
+    <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_async_iterator</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">Any</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">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">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_async_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>
+
+
+<span class="k">class</span> <span class="nc">StreamStreamMultiCallable</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">StreamStreamMultiCallable</span><span class="p">):</span>
+
+    <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_async_iterator</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">Any</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">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">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_async_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>
+
+
+<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="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="sd">&quot;&quot;&quot;Constructor.</span>
+
+<span class="sd">        Args:</span>
+<span class="sd">          target: The target to which to connect.</span>
+<span class="sd">          options: Configuration options for the channel.</span>
+<span class="sd">          credentials: A cygrpc.ChannelCredentials or None.</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.</span>
+<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">_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>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_loop</span><span class="p">)</span>
+
+    <span class="k">async</span> <span class="k">def</span> <span class="fm">__aenter__</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="k">async</span> <span class="k">def</span> <span class="fm">__aexit__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exc_type</span><span class="p">,</span> <span class="n">exc_val</span><span class="p">,</span> <span class="n">exc_tb</span><span class="p">):</span>
+        <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">_close</span><span class="p">(</span><span class="kc">None</span><span class="p">)</span>
+
+    <span class="k">async</span> <span class="k">def</span> <span class="nf">_close</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">grace</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_channel</span><span class="o">.</span><span class="n">closed</span><span class="p">():</span>
+            <span class="k">return</span>
+
+        <span class="c1"># No new calls will be accepted by the Cython channel.</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_channel</span><span class="o">.</span><span class="n">closing</span><span class="p">()</span>
+
+        <span class="c1"># Iterate through running tasks</span>
+        <span class="n">tasks</span> <span class="o">=</span> <span class="n">_all_tasks</span><span class="p">()</span>
+        <span class="n">calls</span> <span class="o">=</span> <span class="p">[]</span>
+        <span class="n">call_tasks</span> <span class="o">=</span> <span class="p">[]</span>
+        <span class="k">for</span> <span class="n">task</span> <span class="ow">in</span> <span class="n">tasks</span><span class="p">:</span>
+            <span class="n">stack</span> <span class="o">=</span> <span class="n">task</span><span class="o">.</span><span class="n">get_stack</span><span class="p">(</span><span class="n">limit</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
+
+            <span class="c1"># If the Task is created by a C-extension, the stack will be empty.</span>
+            <span class="k">if</span> <span class="ow">not</span> <span class="n">stack</span><span class="p">:</span>
+                <span class="k">continue</span>
+
+            <span class="c1"># Locate ones created by `aio.Call`.</span>
+            <span class="n">frame</span> <span class="o">=</span> <span class="n">stack</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+            <span class="n">candidate</span> <span class="o">=</span> <span class="n">frame</span><span class="o">.</span><span class="n">f_locals</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;self&#39;</span><span class="p">)</span>
+            <span class="k">if</span> <span class="n">candidate</span><span class="p">:</span>
+                <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">candidate</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="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">candidate</span><span class="p">,</span> <span class="s1">&#39;_channel&#39;</span><span class="p">):</span>
+                        <span class="c1"># For intercepted Call object</span>
+                        <span class="k">if</span> <span class="n">candidate</span><span class="o">.</span><span class="n">_channel</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_channel</span><span class="p">:</span>
+                            <span class="k">continue</span>
+                    <span class="k">elif</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">candidate</span><span class="p">,</span> <span class="s1">&#39;_cython_call&#39;</span><span class="p">):</span>
+                        <span class="c1"># For normal Call object</span>
+                        <span class="k">if</span> <span class="n">candidate</span><span class="o">.</span><span class="n">_cython_call</span><span class="o">.</span><span class="n">_channel</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_channel</span><span class="p">:</span>
+                            <span class="k">continue</span>
+                    <span class="k">else</span><span class="p">:</span>
+                        <span class="c1"># Unidentified Call object</span>
+                        <span class="k">raise</span> <span class="n">cygrpc</span><span class="o">.</span><span class="n">InternalError</span><span class="p">(</span>
+                            <span class="sa">f</span><span class="s1">&#39;Unrecognized call object: </span><span class="si">{</span><span class="n">candidate</span><span class="si">}</span><span class="s1">&#39;</span><span class="p">)</span>
+
+                    <span class="n">calls</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">candidate</span><span class="p">)</span>
+                    <span class="n">call_tasks</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">task</span><span class="p">)</span>
+
+        <span class="c1"># If needed, try to wait for them to finish.</span>
+        <span class="c1"># Call objects are not always awaitables.</span>
+        <span class="k">if</span> <span class="n">grace</span> <span class="ow">and</span> <span class="n">call_tasks</span><span class="p">:</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="n">call_tasks</span><span class="p">,</span> <span class="n">timeout</span><span class="o">=</span><span class="n">grace</span><span class="p">,</span> <span class="n">loop</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_loop</span><span class="p">)</span>
+
+        <span class="c1"># Time to cancel existing calls.</span>
+        <span class="k">for</span> <span class="n">call</span> <span class="ow">in</span> <span class="n">calls</span><span class="p">:</span>
+            <span class="n">call</span><span class="o">.</span><span class="n">cancel</span><span class="p">()</span>
+
+        <span class="c1"># Destroy the channel</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_channel</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+    <span class="k">async</span> <span class="k">def</span> <span class="nf">close</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">grace</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="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">_close</span><span class="p">(</span><span class="n">grace</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">get_state</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
+                  <span class="n">try_to_connect</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">grpc</span><span class="o">.</span><span class="n">ChannelConnectivity</span><span class="p">:</span>
+        <span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_channel</span><span class="o">.</span><span class="n">check_connectivity_state</span><span class="p">(</span><span class="n">try_to_connect</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">_common</span><span class="o">.</span><span class="n">CYGRPC_CONNECTIVITY_STATE_TO_CHANNEL_CONNECTIVITY</span><span class="p">[</span><span class="n">result</span><span class="p">]</span>
+
+    <span class="k">async</span> <span class="k">def</span> <span class="nf">wait_for_state_change</span><span class="p">(</span>
+            <span class="bp">self</span><span class="p">,</span>
+            <span class="n">last_observed_state</span><span class="p">:</span> <span class="n">grpc</span><span class="o">.</span><span class="n">ChannelConnectivity</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="k">assert</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">_channel</span><span class="o">.</span><span class="n">watch_connectivity_state</span><span class="p">(</span>
+            <span class="n">last_observed_state</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="kc">None</span><span class="p">)</span>
+
+    <span class="k">async</span> <span class="k">def</span> <span class="nf">channel_ready</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">state</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_state</span><span class="p">(</span><span class="n">try_to_connect</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+        <span class="k">while</span> <span class="n">state</span> <span class="o">!=</span> <span class="n">grpc</span><span class="o">.</span><span class="n">ChannelConnectivity</span><span class="o">.</span><span class="n">READY</span><span class="p">:</span>
+            <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">wait_for_state_change</span><span class="p">(</span><span class="n">state</span><span class="p">)</span>
+            <span class="n">state</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_state</span><span class="p">(</span><span class="n">try_to_connect</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">unary_unary</span><span class="p">(</span>
+            <span class="bp">self</span><span class="p">,</span>
+            <span class="n">method</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
+            <span class="n">request_serializer</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">SerializingFunction</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+            <span class="n">response_deserializer</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">DeserializingFunction</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">UnaryUnaryMultiCallable</span><span class="p">:</span>
+        <span class="k">return</span> <span class="n">UnaryUnaryMultiCallable</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="bp">self</span><span class="o">.</span><span class="n">_unary_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">unary_stream</span><span class="p">(</span>
+            <span class="bp">self</span><span class="p">,</span>
+            <span class="n">method</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
+            <span class="n">request_serializer</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">SerializingFunction</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+            <span class="n">response_deserializer</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">DeserializingFunction</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">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="k">def</span> <span class="nf">stream_unary</span><span class="p">(</span>
+            <span class="bp">self</span><span class="p">,</span>
+            <span class="n">method</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
+            <span class="n">request_serializer</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">SerializingFunction</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+            <span class="n">response_deserializer</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">DeserializingFunction</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">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="k">def</span> <span class="nf">stream_stream</span><span class="p">(</span>
+            <span class="bp">self</span><span class="p">,</span>
+            <span class="n">method</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
+            <span class="n">request_serializer</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">SerializingFunction</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+            <span class="n">response_deserializer</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">DeserializingFunction</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">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="bp">self</span><span class="o">.</span><span class="n">_loop</span><span class="p">)</span>
+
+
+<div class="viewcode-block" id="insecure_channel"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.insecure_channel">[docs]</a><span class="k">def</span> <span class="nf">insecure_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">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="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">        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>
+<span class="sd">      interceptors: An optional sequence of interceptors that will be executed for</span>
+<span class="sd">        any call executed with this channel.</span>
+
+<span class="sd">    Returns:</span>
+<span class="sd">      A Channel.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="k">return</span> <span class="n">Channel</span><span class="p">(</span><span class="n">target</span><span class="p">,</span> <span class="p">()</span> <span class="k">if</span> <span class="n">options</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">options</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span>
+                   <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>
+    <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">        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>
+<span class="sd">      interceptors: An optional sequence of interceptors that will be executed for</span>
+<span class="sd">        any call executed with this channel.</span>
+
+<span class="sd">    Returns:</span>
+<span class="sd">      An aio.Channel.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="k">return</span> <span class="n">Channel</span><span class="p">(</span><span class="n">target</span><span class="p">,</span> <span class="p">()</span> <span class="k">if</span> <span class="n">options</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">options</span><span class="p">,</span>
+                   <span class="n">credentials</span><span class="o">.</span><span class="n">_credentials</span><span class="p">,</span> <span class="n">compression</span><span class="p">,</span> <span class="n">interceptors</span><span class="p">)</span></div>
+</pre></div>
+
+          </div>
+          
+        </div>
+      </div>
+    <div class="clearer"></div>
+  </div>
+    <div class="footer">
+      &copy;2018, 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>

+ 471 - 0
python/_modules/grpc/experimental/aio/_interceptor.html

@@ -0,0 +1,471 @@
+
+<!DOCTYPE html>
+
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
+  <head>
+    <meta charset="utf-8" />
+    <title>grpc.experimental.aio._interceptor &#8212; gRPC Python 1.28.1 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.28.1</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>
+  <li><a href="../../../grpc.html">grpc</a><ul>
+  </ul></li>
+  </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.experimental.aio._interceptor</h1><div class="highlight"><pre>
+<span></span><span class="c1"># Copyright 2019 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;Interceptors implementation of gRPC Asyncio Python.&quot;&quot;&quot;</span>
+<span class="kn">import</span> <span class="nn">asyncio</span>
+<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="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">._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">_LOCAL_CANCELLATION_DETAILS</span> <span class="o">=</span> <span class="s1">&#39;Locally cancelled by application!&#39;</span>
+
+
+<div class="viewcode-block" id="ClientCallDetails"><a class="viewcode-back" href="../../../../grpc_asyncio.html#grpc.experimental.aio.ClientCallDetails">[docs]</a><span class="k">class</span> <span class="nc">ClientCallDetails</span><span class="p">(</span>
+        <span class="n">collections</span><span class="o">.</span><span class="n">namedtuple</span><span class="p">(</span>
+            <span class="s1">&#39;ClientCallDetails&#39;</span><span class="p">,</span>
+            <span class="p">(</span><span class="s1">&#39;method&#39;</span><span class="p">,</span> <span class="s1">&#39;timeout&#39;</span><span class="p">,</span> <span class="s1">&#39;metadata&#39;</span><span class="p">,</span> <span class="s1">&#39;credentials&#39;</span><span class="p">,</span> <span class="s1">&#39;wait_for_ready&#39;</span><span class="p">)),</span>
+        <span class="n">grpc</span><span class="o">.</span><span class="n">ClientCallDetails</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;Describes an RPC to be invoked.</span>
+
+<span class="sd">    This is an EXPERIMENTAL API.</span>
+
+<span class="sd">    Args:</span>
+<span class="sd">        method: The method name of the RPC.</span>
+<span class="sd">        timeout: An optional duration of time in seconds to allow for the RPC.</span>
+<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">    &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">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="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>
+    <span class="k">async</span> <span class="k">def</span> <span class="nf">intercept_unary_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">UnaryUnaryCall</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">UnaryUnaryCall</span><span class="p">,</span> <span class="n">ResponseType</span><span class="p">]:</span>
+        <span class="sd">&quot;&quot;&quot;Intercepts a unary-unary invocation asynchronously.</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 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">            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">          An object with the RPC response.</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></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="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>
+<span class="sd">    after the RPC invocation with the capacity for accessing to the wrapped</span>
+<span class="sd">    `UnaryUnaryCall`.</span>
+
+<span class="sd">    It handles also early and later cancellations, when the RPC has not even</span>
+<span class="sd">    started and the execution is still held by the interceptors or when the</span>
+<span class="sd">    RPC has finished but again the execution is still held by the interceptors.</span>
+
+<span class="sd">    Once the RPC is finally executed, all methods are finally done against the</span>
+<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">    &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">asyncio</span><span class="o">.</span><span class="n">ensure_future</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="n">loop</span><span class="o">=</span><span class="n">loop</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="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="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">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>
+
+    <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="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">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">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>
+
+<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">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>
+
+        <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="k">as</span> <span class="n">err</span><span class="p">:</span>
+            <span class="k">return</span> <span class="n">err</span><span class="o">.</span><span class="n">code</span><span class="p">()</span> <span class="o">==</span> <span class="n">grpc</span><span class="o">.</span><span class="n">StatusCode</span><span class="o">.</span><span class="n">CANCELLED</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">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>
+
+<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">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>
+
+        <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="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>
+
+<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">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>
+
+        <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="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">callback</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
+            <span class="k">return</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">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>
+
+<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 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">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>
+            <span class="k">return</span> <span class="n">err</span><span class="o">.</span><span class="n">initial_metadata</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>
+            <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>
+
+<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">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>
+            <span class="k">return</span> <span class="n">err</span><span class="o">.</span><span class="n">trailing_metadata</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>
+            <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>
+
+<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">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>
+            <span class="k">return</span> <span class="n">err</span><span class="o">.</span><span class="n">code</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>
+            <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>
+
+<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">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>
+            <span class="k">return</span> <span class="n">err</span><span class="o">.</span><span class="n">details</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>
+            <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">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>
+            <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>
+            <span class="k">return</span> <span class="n">err</span><span class="o">.</span><span class="n">debug_error_string</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>
+            <span class="k">return</span> <span class="s1">&#39;&#39;</span>
+
+        <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">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>
+
+
+<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>
+    <span class="sd">&quot;&quot;&quot;Final UnaryUnaryCall class finished with a response.&quot;&quot;&quot;</span>
+    <span class="n">_response</span><span class="p">:</span> <span class="n">ResponseType</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">response</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</span> <span class="o">=</span> <span class="n">response</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="kc">False</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="kc">False</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="kc">True</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">unused_callback</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+        <span class="k">raise</span> <span class="ne">NotImplementedError</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">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">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">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>
+        <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">OK</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="s1">&#39;&#39;</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="kc">None</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="k">if</span> <span class="kc">False</span><span class="p">:</span>  <span class="c1"># pylint: disable=using-constant-test</span>
+            <span class="c1"># This code path is never used, but a yield statement is needed</span>
+            <span class="c1"># for telling the interpreter that __await__ is a generator.</span>
+            <span class="k">yield</span> <span class="kc">None</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_response</span>
+</pre></div>
+
+          </div>
+          
+        </div>
+      </div>
+    <div class="clearer"></div>
+  </div>
+    <div class="footer">
+      &copy;2018, 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>

+ 315 - 0
python/_modules/grpc/experimental/aio/_server.html

@@ -0,0 +1,315 @@
+
+<!DOCTYPE html>
+
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
+  <head>
+    <meta charset="utf-8" />
+    <title>grpc.experimental.aio._server &#8212; gRPC Python 1.28.1 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.28.1</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>
+  <li><a href="../../../grpc.html">grpc</a><ul>
+  </ul></li>
+  </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.experimental.aio._server</h1><div class="highlight"><pre>
+<span></span><span class="c1"># Copyright 2019 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;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>
+
+<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="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_server</span>
+<span class="kn">from</span> <span class="nn">._typing</span> <span class="kn">import</span> <span class="n">ChannelArgumentType</span>
+
+
+<span class="k">def</span> <span class="nf">_augment_channel_arguments</span><span class="p">(</span><span class="n">base_options</span><span class="p">:</span> <span class="n">ChannelArgumentType</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">compression_option</span> <span class="o">=</span> <span class="n">_compression</span><span class="o">.</span><span class="n">create_channel_option</span><span class="p">(</span><span class="n">compression</span><span class="p">)</span>
+    <span class="k">return</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">base_options</span><span class="p">)</span> <span class="o">+</span> <span class="n">compression_option</span>
+
+
+<span class="k">class</span> <span class="nc">Server</span><span class="p">(</span><span class="n">_base_server</span><span class="o">.</span><span class="n">Server</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;Serves RPCs.&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">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="n">generic_handlers</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">grpc</span><span class="o">.</span><span class="n">GenericRpcHandler</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">Any</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">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">_server</span> <span class="o">=</span> <span class="n">cygrpc</span><span class="o">.</span><span class="n">AioServer</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">thread_pool</span><span class="p">,</span> <span class="n">generic_handlers</span><span class="p">,</span> <span class="n">interceptors</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">maximum_concurrent_rpcs</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">add_generic_rpc_handlers</span><span class="p">(</span>
+            <span class="bp">self</span><span class="p">,</span>
+            <span class="n">generic_rpc_handlers</span><span class="p">:</span> <span class="n">Sequence</span><span class="p">[</span><span class="n">grpc</span><span class="o">.</span><span class="n">GenericRpcHandler</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;Registers GenericRpcHandlers with this Server.</span>
+
+<span class="sd">        This method is only safe to call before the server is started.</span>
+
+<span class="sd">        Args:</span>
+<span class="sd">          generic_rpc_handlers: A sequence of GenericRpcHandlers that will be</span>
+<span class="sd">          used to service RPCs.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_server</span><span class="o">.</span><span class="n">add_generic_rpc_handlers</span><span class="p">(</span><span class="n">generic_rpc_handlers</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">add_insecure_port</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">address</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
+        <span class="sd">&quot;&quot;&quot;Opens an insecure port for accepting RPCs.</span>
+
+<span class="sd">        This method may only be called before starting the server.</span>
+
+<span class="sd">        Args:</span>
+<span class="sd">          address: The address for which to open a port. If the port is 0,</span>
+<span class="sd">            or not specified in the address, then the gRPC runtime will choose a port.</span>
+
+<span class="sd">        Returns:</span>
+<span class="sd">          An integer port on which the server will accept RPC requests.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_server</span><span class="o">.</span><span class="n">add_insecure_port</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">address</span><span class="p">))</span>
+
+    <span class="k">def</span> <span class="nf">add_secure_port</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">address</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
+                        <span class="n">server_credentials</span><span class="p">:</span> <span class="n">grpc</span><span class="o">.</span><span class="n">ServerCredentials</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
+        <span class="sd">&quot;&quot;&quot;Opens a secure port for accepting RPCs.</span>
+
+<span class="sd">        This method may only be called before starting the server.</span>
+
+<span class="sd">        Args:</span>
+<span class="sd">          address: The address for which to open a port.</span>
+<span class="sd">            if the port is 0, or not specified in the address, then the gRPC</span>
+<span class="sd">            runtime will choose a port.</span>
+<span class="sd">          server_credentials: A ServerCredentials object.</span>
+
+<span class="sd">        Returns:</span>
+<span class="sd">          An integer port on which the server will accept RPC requests.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_server</span><span class="o">.</span><span class="n">add_secure_port</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">address</span><span class="p">),</span>
+                                            <span class="n">server_credentials</span><span class="p">)</span>
+
+    <span class="k">async</span> <span class="k">def</span> <span class="nf">start</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;Starts this Server.</span>
+
+<span class="sd">        This method may only be called once. (i.e. it is not idempotent).</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">_server</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
+
+    <span class="k">async</span> <span class="k">def</span> <span class="nf">stop</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">grace</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">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+        <span class="sd">&quot;&quot;&quot;Stops this Server.</span>
+
+<span class="sd">        This method immediately stops the server from servicing new RPCs in</span>
+<span class="sd">        all cases.</span>
+
+<span class="sd">        If a grace period is specified, this method returns immediately and all</span>
+<span class="sd">        RPCs active at the end of the grace period are aborted. If a grace</span>
+<span class="sd">        period is not specified (by passing None for grace), all existing RPCs</span>
+<span class="sd">        are aborted immediately and this method blocks until the last RPC</span>
+<span class="sd">        handler terminates.</span>
+
+<span class="sd">        This method is idempotent and may be called at any time. Passing a</span>
+<span class="sd">        smaller grace value in a subsequent call will have the effect of</span>
+<span class="sd">        stopping the Server sooner (passing None will have the effect of</span>
+<span class="sd">        stopping the server immediately). Passing a larger grace value in a</span>
+<span class="sd">        subsequent call will not have the effect of stopping the server later</span>
+<span class="sd">        (i.e. the most restrictive grace value is used).</span>
+
+<span class="sd">        Args:</span>
+<span class="sd">          grace: A duration of time in seconds or None.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">await</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="n">grace</span><span class="p">)</span>
+
+    <span class="k">async</span> <span class="k">def</span> <span class="nf">wait_for_termination</span><span class="p">(</span><span class="bp">self</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="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+        <span class="sd">&quot;&quot;&quot;Block current coroutine until the server stops.</span>
+
+<span class="sd">        This is an EXPERIMENTAL API.</span>
+
+<span class="sd">        The wait will not consume computational resources during blocking, and</span>
+<span class="sd">        it will block until one of the two following conditions are met:</span>
+
+<span class="sd">        1) The server is stopped or terminated;</span>
+<span class="sd">        2) A timeout occurs if timeout is not `None`.</span>
+
+<span class="sd">        The timeout argument works in the same way as `threading.Event.wait()`.</span>
+<span class="sd">        https://docs.python.org/3/library/threading.html#threading.Event.wait</span>
+
+<span class="sd">        Args:</span>
+<span class="sd">          timeout: A floating point number specifying a timeout for the</span>
+<span class="sd">            operation in seconds.</span>
+
+<span class="sd">        Returns:</span>
+<span class="sd">          A bool indicates if the operation times out.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">_server</span><span class="o">.</span><span class="n">wait_for_termination</span><span class="p">(</span><span class="n">timeout</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="sd">&quot;&quot;&quot;Schedules a graceful shutdown in current event loop.</span>
+
+<span class="sd">        The Cython AioServer doesn&#39;t hold a ref-count to this class. It should</span>
+<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="bp">self</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">_server</span><span class="o">.</span><span class="n">shutdown</span><span class="p">(</span><span class="kc">None</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>
+           <span class="n">handlers</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">grpc</span><span class="o">.</span><span class="n">GenericRpcHandler</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">Any</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</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">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="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="sd">&quot;&quot;&quot;Creates a Server with which RPCs can be serviced.</span>
+
+<span class="sd">    Args:</span>
+<span class="sd">      migration_thread_pool: A futures.ThreadPoolExecutor to be used by the</span>
+<span class="sd">        Server to execute non-AsyncIO RPC handlers for migration purpose.</span>
+<span class="sd">      handlers: An optional list of GenericRpcHandlers used for executing RPCs.</span>
+<span class="sd">        More handlers may be added by calling add_generic_rpc_handlers any time</span>
+<span class="sd">        before the server is started.</span>
+<span class="sd">      interceptors: An optional list of ServerInterceptor objects that observe</span>
+<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">        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>
+<span class="sd">        indicate no limit.</span>
+<span class="sd">      compression: An element of grpc.compression, e.g.</span>
+<span class="sd">        grpc.compression.Gzip. This compression algorithm will be used for the</span>
+<span class="sd">        lifetime of the server unless overridden by set_compression. This is an</span>
+<span class="sd">        EXPERIMENTAL option.</span>
+
+<span class="sd">    Returns:</span>
+<span class="sd">      A Server object.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="k">return</span> <span class="n">Server</span><span class="p">(</span><span class="n">migration_thread_pool</span><span class="p">,</span> <span class="p">()</span> <span class="k">if</span> <span class="n">handlers</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">handlers</span><span class="p">,</span>
+                  <span class="p">()</span> <span class="k">if</span> <span class="n">interceptors</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">interceptors</span><span class="p">,</span>
+                  <span class="p">()</span> <span class="k">if</span> <span class="n">options</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">options</span><span class="p">,</span> <span class="n">maximum_concurrent_rpcs</span><span class="p">,</span>
+                  <span class="n">compression</span><span class="p">)</span></div>
+</pre></div>
+
+          </div>
+          
+        </div>
+      </div>
+    <div class="clearer"></div>
+  </div>
+    <div class="footer">
+      &copy;2018, 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>

+ 27 - 30
python/_modules/grpc_channelz/v1/channelz.html

@@ -1,19 +1,17 @@
 
 
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!DOCTYPE html>
 
 
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
   <head>
   <head>
-    <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-    <title>grpc_channelz.v1.channelz &#8212; gRPC Python 1.26.0 documentation</title>
+    <meta charset="utf-8" />
+    <title>grpc_channelz.v1.channelz &#8212; gRPC Python 1.28.1 documentation</title>
     <link rel="stylesheet" href="../../../_static/alabaster.css" type="text/css" />
     <link rel="stylesheet" href="../../../_static/alabaster.css" type="text/css" />
     <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
     <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
-    <script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
-    <script type="text/javascript" src="../../../_static/jquery.js"></script>
-    <script type="text/javascript" src="../../../_static/underscore.js"></script>
-    <script type="text/javascript" src="../../../_static/doctools.js"></script>
-    <script type="text/javascript" src="../../../_static/language_data.js"></script>
+    <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="index" title="Index" href="../../../genindex.html" />
     <link rel="search" title="Search" href="../../../search.html" />
     <link rel="search" title="Search" href="../../../search.html" />
    
    
@@ -31,7 +29,7 @@
 
 
 
 
 
 
-<p class="blurb">1.26.0</p>
+<p class="blurb">1.28.1</p>
 
 
 
 
 
 
@@ -42,6 +40,7 @@
 <p class="caption"><span class="caption-text">Contents:</span></p>
 <p class="caption"><span class="caption-text">Contents:</span></p>
 <ul>
 <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.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_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_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_reflection.html">gRPC Reflection</a></li>
@@ -60,17 +59,15 @@
 </ul>
 </ul>
 </div>
 </div>
 <div id="searchbox" style="display: none" role="search">
 <div id="searchbox" style="display: none" role="search">
-  <h3>Quick search</h3>
+  <h3 id="searchlabel">Quick search</h3>
     <div class="searchformwrapper">
     <div class="searchformwrapper">
     <form class="search" action="../../../search.html" method="get">
     <form class="search" action="../../../search.html" method="get">
-      <input type="text" name="q" />
+      <input type="text" name="q" aria-labelledby="searchlabel" />
       <input type="submit" value="Go" />
       <input type="submit" value="Go" />
-      <input type="hidden" name="check_keywords" value="yes" />
-      <input type="hidden" name="area" value="default" />
     </form>
     </form>
     </div>
     </div>
 </div>
 </div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
+<script>$('#searchbox').show(0);</script>
 
 
 
 
 
 
@@ -115,7 +112,7 @@
 <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>
 <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>
     <span class="sd">&quot;&quot;&quot;Servicer handling RPCs for service statuses.&quot;&quot;&quot;</span>
 
 
-    <span class="nd">@staticmethod</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">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">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="k">return</span> <span class="n">json_format</span><span class="o">.</span><span class="n">Parse</span><span class="p">(</span>
@@ -124,9 +121,9 @@
             <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="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_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>
+            <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>
 
 
-    <span class="nd">@staticmethod</span>
+<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">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">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="k">return</span> <span class="n">json_format</span><span class="o">.</span><span class="n">Parse</span><span class="p">(</span>
@@ -135,9 +132,9 @@
             <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="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_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>
+            <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>
 
 
-    <span class="nd">@staticmethod</span>
+<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">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">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="k">return</span> <span class="n">json_format</span><span class="o">.</span><span class="n">Parse</span><span class="p">(</span>
@@ -149,9 +146,9 @@
             <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="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="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_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>
+            <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>
 
 
-    <span class="nd">@staticmethod</span>
+<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">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">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="k">return</span> <span class="n">json_format</span><span class="o">.</span><span class="n">Parse</span><span class="p">(</span>
@@ -165,9 +162,9 @@
             <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="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="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_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>
+            <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>
 
 
-    <span class="nd">@staticmethod</span>
+<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">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">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="k">return</span> <span class="n">json_format</span><span class="o">.</span><span class="n">Parse</span><span class="p">(</span>
@@ -179,9 +176,9 @@
             <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="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="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_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>
+            <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>
 
 
-    <span class="nd">@staticmethod</span>
+<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">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">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="k">return</span> <span class="n">json_format</span><span class="o">.</span><span class="n">Parse</span><span class="p">(</span>
@@ -193,9 +190,9 @@
             <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="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="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_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>
+            <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>
 
 
-    <span class="nd">@staticmethod</span>
+<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">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">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="k">return</span> <span class="n">json_format</span><span class="o">.</span><span class="n">Parse</span><span class="p">(</span>
@@ -207,7 +204,7 @@
             <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="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="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_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>
+            <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>
 <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>

+ 26 - 22
python/_modules/grpc_health/v1/health.html

@@ -1,19 +1,17 @@
 
 
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!DOCTYPE html>
 
 
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
   <head>
   <head>
-    <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-    <title>grpc_health.v1.health &#8212; gRPC Python 1.26.0 documentation</title>
+    <meta charset="utf-8" />
+    <title>grpc_health.v1.health &#8212; gRPC Python 1.28.1 documentation</title>
     <link rel="stylesheet" href="../../../_static/alabaster.css" type="text/css" />
     <link rel="stylesheet" href="../../../_static/alabaster.css" type="text/css" />
     <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
     <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
-    <script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
-    <script type="text/javascript" src="../../../_static/jquery.js"></script>
-    <script type="text/javascript" src="../../../_static/underscore.js"></script>
-    <script type="text/javascript" src="../../../_static/doctools.js"></script>
-    <script type="text/javascript" src="../../../_static/language_data.js"></script>
+    <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="index" title="Index" href="../../../genindex.html" />
     <link rel="search" title="Search" href="../../../search.html" />
     <link rel="search" title="Search" href="../../../search.html" />
    
    
@@ -31,7 +29,7 @@
 
 
 
 
 
 
-<p class="blurb">1.26.0</p>
+<p class="blurb">1.28.1</p>
 
 
 
 
 
 
@@ -42,6 +40,7 @@
 <p class="caption"><span class="caption-text">Contents:</span></p>
 <p class="caption"><span class="caption-text">Contents:</span></p>
 <ul>
 <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.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_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_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_reflection.html">gRPC Reflection</a></li>
@@ -60,17 +59,15 @@
 </ul>
 </ul>
 </div>
 </div>
 <div id="searchbox" style="display: none" role="search">
 <div id="searchbox" style="display: none" role="search">
-  <h3>Quick search</h3>
+  <h3 id="searchlabel">Quick search</h3>
     <div class="searchformwrapper">
     <div class="searchformwrapper">
     <form class="search" action="../../../search.html" method="get">
     <form class="search" action="../../../search.html" method="get">
-      <input type="text" name="q" />
+      <input type="text" name="q" aria-labelledby="searchlabel" />
       <input type="submit" value="Go" />
       <input type="submit" value="Go" />
-      <input type="hidden" name="check_keywords" value="yes" />
-      <input type="hidden" name="area" value="default" />
     </form>
     </form>
     </div>
     </div>
 </div>
 </div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
+<script>$('#searchbox').show(0);</script>
 
 
 
 
 
 
@@ -105,13 +102,20 @@
 
 
 <span class="kn">import</span> <span class="nn">collections</span>
 <span class="kn">import</span> <span class="nn">collections</span>
 <span class="kn">import</span> <span class="nn">threading</span>
 <span class="kn">import</span> <span class="nn">threading</span>
-
+<span class="kn">import</span> <span class="nn">sys</span>
 <span class="kn">import</span> <span class="nn">grpc</span>
 <span class="kn">import</span> <span class="nn">grpc</span>
 
 
 <span class="kn">from</span> <span class="nn">grpc_health.v1</span> <span class="kn">import</span> <span class="n">health_pb2</span> <span class="k">as</span> <span class="n">_health_pb2</span>
 <span class="kn">from</span> <span class="nn">grpc_health.v1</span> <span class="kn">import</span> <span class="n">health_pb2</span> <span class="k">as</span> <span class="n">_health_pb2</span>
 <span class="kn">from</span> <span class="nn">grpc_health.v1</span> <span class="kn">import</span> <span class="n">health_pb2_grpc</span> <span class="k">as</span> <span class="n">_health_pb2_grpc</span>
 <span class="kn">from</span> <span class="nn">grpc_health.v1</span> <span class="kn">import</span> <span class="n">health_pb2_grpc</span> <span class="k">as</span> <span class="n">_health_pb2_grpc</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 AsyncHealthServicer 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="c1"># pylint: disable=unused-import</span>
+
+<span class="c1"># The service name of the health checking servicer.</span>
 <span class="n">SERVICE_NAME</span> <span class="o">=</span> <span class="n">_health_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;Health&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">full_name</span>
 <span class="n">SERVICE_NAME</span> <span class="o">=</span> <span class="n">_health_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;Health&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">full_name</span>
+<span class="c1"># The entry of overall health for the entire server.</span>
+<span class="n">OVERALL_HEALTH</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span>
 
 
 
 
 <span class="k">class</span> <span class="nc">_Watcher</span><span class="p">():</span>
 <span class="k">class</span> <span class="nc">_Watcher</span><span class="p">():</span>
@@ -184,17 +188,17 @@
 
 
         <span class="k">return</span> <span class="n">callback</span>
         <span class="k">return</span> <span class="n">callback</span>
 
 
-    <span class="k">def</span> <span class="nf">Check</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">context</span><span class="p">):</span>
+<div class="viewcode-block" id="HealthServicer.Check"><a class="viewcode-back" href="../../../grpc_health_checking.html#grpc_health.v1.health.HealthServicer.Check">[docs]</a>    <span class="k">def</span> <span class="nf">Check</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">context</span><span class="p">):</span>
         <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">_lock</span><span class="p">:</span>
         <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">_lock</span><span class="p">:</span>
             <span class="n">status</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_server_status</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">service</span><span class="p">)</span>
             <span class="n">status</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_server_status</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">service</span><span class="p">)</span>
             <span class="k">if</span> <span class="n">status</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
             <span class="k">if</span> <span class="n">status</span> <span class="ow">is</span> <span class="kc">None</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_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="k">return</span> <span class="n">_health_pb2</span><span class="o">.</span><span class="n">HealthCheckResponse</span><span class="p">()</span>
                 <span class="k">return</span> <span class="n">_health_pb2</span><span class="o">.</span><span class="n">HealthCheckResponse</span><span class="p">()</span>
             <span class="k">else</span><span class="p">:</span>
             <span class="k">else</span><span class="p">:</span>
-                <span class="k">return</span> <span class="n">_health_pb2</span><span class="o">.</span><span class="n">HealthCheckResponse</span><span class="p">(</span><span class="n">status</span><span class="o">=</span><span class="n">status</span><span class="p">)</span>
+                <span class="k">return</span> <span class="n">_health_pb2</span><span class="o">.</span><span class="n">HealthCheckResponse</span><span class="p">(</span><span class="n">status</span><span class="o">=</span><span class="n">status</span><span class="p">)</span></div>
 
 
     <span class="c1"># pylint: disable=arguments-differ</span>
     <span class="c1"># pylint: disable=arguments-differ</span>
-    <span class="k">def</span> <span class="nf">Watch</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">context</span><span class="p">,</span> <span class="n">send_response_callback</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
+<div class="viewcode-block" id="HealthServicer.Watch"><a class="viewcode-back" href="../../../grpc_health_checking.html#grpc_health.v1.health.HealthServicer.Watch">[docs]</a>    <span class="k">def</span> <span class="nf">Watch</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">context</span><span class="p">,</span> <span class="n">send_response_callback</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
         <span class="n">blocking_watcher</span> <span class="o">=</span> <span class="kc">None</span>
         <span class="n">blocking_watcher</span> <span class="o">=</span> <span class="kc">None</span>
         <span class="k">if</span> <span class="n">send_response_callback</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
         <span class="k">if</span> <span class="n">send_response_callback</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
             <span class="c1"># The server does not support the experimental_non_blocking</span>
             <span class="c1"># The server does not support the experimental_non_blocking</span>
@@ -215,13 +219,13 @@
             <span class="bp">self</span><span class="o">.</span><span class="n">_send_response_callbacks</span><span class="p">[</span><span class="n">service</span><span class="p">]</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">send_response_callback</span><span class="p">)</span>
             <span class="bp">self</span><span class="o">.</span><span class="n">_send_response_callbacks</span><span class="p">[</span><span class="n">service</span><span class="p">]</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">send_response_callback</span><span class="p">)</span>
             <span class="n">context</span><span class="o">.</span><span class="n">add_callback</span><span class="p">(</span>
             <span class="n">context</span><span class="o">.</span><span class="n">add_callback</span><span class="p">(</span>
                 <span class="bp">self</span><span class="o">.</span><span class="n">_on_close_callback</span><span class="p">(</span><span class="n">send_response_callback</span><span class="p">,</span> <span class="n">service</span><span class="p">))</span>
                 <span class="bp">self</span><span class="o">.</span><span class="n">_on_close_callback</span><span class="p">(</span><span class="n">send_response_callback</span><span class="p">,</span> <span class="n">service</span><span class="p">))</span>
-        <span class="k">return</span> <span class="n">blocking_watcher</span>
+        <span class="k">return</span> <span class="n">blocking_watcher</span></div>
 
 
 <div class="viewcode-block" id="HealthServicer.set"><a class="viewcode-back" href="../../../grpc_health_checking.html#grpc_health.v1.health.HealthServicer.set">[docs]</a>    <span class="k">def</span> <span class="nf">set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">service</span><span class="p">,</span> <span class="n">status</span><span class="p">):</span>
 <div class="viewcode-block" id="HealthServicer.set"><a class="viewcode-back" href="../../../grpc_health_checking.html#grpc_health.v1.health.HealthServicer.set">[docs]</a>    <span class="k">def</span> <span class="nf">set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">service</span><span class="p">,</span> <span class="n">status</span><span class="p">):</span>
         <span class="sd">&quot;&quot;&quot;Sets the status of a service.</span>
         <span class="sd">&quot;&quot;&quot;Sets the status of a service.</span>
 
 
 <span class="sd">        Args:</span>
 <span class="sd">        Args:</span>
-<span class="sd">          service: string, the name of the service. NOTE, &#39;&#39; must be set.</span>
+<span class="sd">          service: string, the name of the service.</span>
 <span class="sd">          status: HealthCheckResponse.status enum value indicating the status of</span>
 <span class="sd">          status: HealthCheckResponse.status enum value indicating the status of</span>
 <span class="sd">            the service</span>
 <span class="sd">            the service</span>
 <span class="sd">        &quot;&quot;&quot;</span>
 <span class="sd">        &quot;&quot;&quot;</span>

+ 23 - 29
python/_modules/grpc_reflection/v1alpha/reflection.html

@@ -1,19 +1,17 @@
 
 
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!DOCTYPE html>
 
 
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
   <head>
   <head>
-    <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-    <title>grpc_reflection.v1alpha.reflection &#8212; gRPC Python 1.26.0 documentation</title>
+    <meta charset="utf-8" />
+    <title>grpc_reflection.v1alpha.reflection &#8212; gRPC Python 1.28.1 documentation</title>
     <link rel="stylesheet" href="../../../_static/alabaster.css" type="text/css" />
     <link rel="stylesheet" href="../../../_static/alabaster.css" type="text/css" />
     <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
     <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
-    <script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
-    <script type="text/javascript" src="../../../_static/jquery.js"></script>
-    <script type="text/javascript" src="../../../_static/underscore.js"></script>
-    <script type="text/javascript" src="../../../_static/doctools.js"></script>
-    <script type="text/javascript" src="../../../_static/language_data.js"></script>
+    <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="index" title="Index" href="../../../genindex.html" />
     <link rel="search" title="Search" href="../../../search.html" />
     <link rel="search" title="Search" href="../../../search.html" />
    
    
@@ -31,7 +29,7 @@
 
 
 
 
 
 
-<p class="blurb">1.26.0</p>
+<p class="blurb">1.28.1</p>
 
 
 
 
 
 
@@ -42,6 +40,7 @@
 <p class="caption"><span class="caption-text">Contents:</span></p>
 <p class="caption"><span class="caption-text">Contents:</span></p>
 <ul>
 <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.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_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_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_reflection.html">gRPC Reflection</a></li>
@@ -60,17 +59,15 @@
 </ul>
 </ul>
 </div>
 </div>
 <div id="searchbox" style="display: none" role="search">
 <div id="searchbox" style="display: none" role="search">
-  <h3>Quick search</h3>
+  <h3 id="searchlabel">Quick search</h3>
     <div class="searchformwrapper">
     <div class="searchformwrapper">
     <form class="search" action="../../../search.html" method="get">
     <form class="search" action="../../../search.html" method="get">
-      <input type="text" name="q" />
+      <input type="text" name="q" aria-labelledby="searchlabel" />
       <input type="submit" value="Go" />
       <input type="submit" value="Go" />
-      <input type="hidden" name="check_keywords" value="yes" />
-      <input type="hidden" name="area" value="default" />
     </form>
     </form>
     </div>
     </div>
 </div>
 </div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
+<script>$('#searchbox').show(0);</script>
 
 
 
 
 
 
@@ -179,10 +176,8 @@
             <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">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">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="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="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">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">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">else</span><span class="p">:</span>
@@ -194,13 +189,12 @@
 
 
     <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">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="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>
+            <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>
 
 
-    <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>
+<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="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>
         <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">if</span> <span class="n">request</span><span class="o">.</span><span class="n">HasField</span><span class="p">(</span><span class="s1">&#39;file_by_filename&#39;</span><span class="p">):</span>
             <span class="k">if</span> <span class="n">request</span><span class="o">.</span><span class="n">HasField</span><span class="p">(</span><span class="s1">&#39;file_by_filename&#39;</span><span class="p">):</span>
@@ -221,9 +215,9 @@
                 <span class="k">yield</span> <span class="n">_reflection_pb2</span><span class="o">.</span><span class="n">ServerReflectionResponse</span><span class="p">(</span>
                 <span class="k">yield</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_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">INVALID_ARGUMENT</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_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">INVALID_ARGUMENT</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">INVALID_ARGUMENT</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></div>
+                        <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">INVALID_ARGUMENT</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></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>
 <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>

+ 22 - 25
python/_modules/grpc_status/rpc_status.html

@@ -1,19 +1,17 @@
 
 
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!DOCTYPE html>
 
 
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
   <head>
   <head>
-    <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-    <title>grpc_status.rpc_status &#8212; gRPC Python 1.26.0 documentation</title>
+    <meta charset="utf-8" />
+    <title>grpc_status.rpc_status &#8212; gRPC Python 1.28.1 documentation</title>
     <link rel="stylesheet" href="../../_static/alabaster.css" type="text/css" />
     <link rel="stylesheet" href="../../_static/alabaster.css" type="text/css" />
     <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
     <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
-    <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
-    <script type="text/javascript" src="../../_static/jquery.js"></script>
-    <script type="text/javascript" src="../../_static/underscore.js"></script>
-    <script type="text/javascript" src="../../_static/doctools.js"></script>
-    <script type="text/javascript" src="../../_static/language_data.js"></script>
+    <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="index" title="Index" href="../../genindex.html" />
     <link rel="search" title="Search" href="../../search.html" />
     <link rel="search" title="Search" href="../../search.html" />
    
    
@@ -31,7 +29,7 @@
 
 
 
 
 
 
-<p class="blurb">1.26.0</p>
+<p class="blurb">1.28.1</p>
 
 
 
 
 
 
@@ -42,6 +40,7 @@
 <p class="caption"><span class="caption-text">Contents:</span></p>
 <p class="caption"><span class="caption-text">Contents:</span></p>
 <ul>
 <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.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_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_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_reflection.html">gRPC Reflection</a></li>
@@ -60,17 +59,15 @@
 </ul>
 </ul>
 </div>
 </div>
 <div id="searchbox" style="display: none" role="search">
 <div id="searchbox" style="display: none" role="search">
-  <h3>Quick search</h3>
+  <h3 id="searchlabel">Quick search</h3>
     <div class="searchformwrapper">
     <div class="searchformwrapper">
     <form class="search" action="../../search.html" method="get">
     <form class="search" action="../../search.html" method="get">
-      <input type="text" name="q" />
+      <input type="text" name="q" aria-labelledby="searchlabel" />
       <input type="submit" value="Go" />
       <input type="submit" value="Go" />
-      <input type="hidden" name="check_keywords" value="yes" />
-      <input type="hidden" name="area" value="default" />
     </form>
     </form>
     </div>
     </div>
 </div>
 </div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
+<script>$('#searchbox').show(0);</script>
 
 
 
 
 
 
@@ -115,8 +112,9 @@
 
 
 
 
 <span class="k">class</span> <span class="nc">_Status</span><span class="p">(</span>
 <span class="k">class</span> <span class="nc">_Status</span><span class="p">(</span>
-        <span class="n">collections</span><span class="o">.</span><span class="n">namedtuple</span><span class="p">(</span>
-            <span class="s1">&#39;_Status&#39;</span><span class="p">,</span> <span class="p">(</span><span class="s1">&#39;code&#39;</span><span class="p">,</span> <span class="s1">&#39;details&#39;</span><span class="p">,</span> <span class="s1">&#39;trailing_metadata&#39;</span><span class="p">)),</span> <span class="n">grpc</span><span class="o">.</span><span class="n">Status</span><span class="p">):</span>
+        <span class="n">collections</span><span class="o">.</span><span class="n">namedtuple</span><span class="p">(</span><span class="s1">&#39;_Status&#39;</span><span class="p">,</span>
+                               <span class="p">(</span><span class="s1">&#39;code&#39;</span><span class="p">,</span> <span class="s1">&#39;details&#39;</span><span class="p">,</span> <span class="s1">&#39;trailing_metadata&#39;</span><span class="p">)),</span>
+        <span class="n">grpc</span><span class="o">.</span><span class="n">Status</span><span class="p">):</span>
     <span class="k">pass</span>
     <span class="k">pass</span>
 
 
 
 
@@ -150,8 +148,8 @@
             <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">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="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="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">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="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>
                     <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>
@@ -172,11 +170,10 @@
 <span class="sd">    Returns:</span>
 <span class="sd">    Returns:</span>
 <span class="sd">      A grpc.Status instance representing the input google.rpc.status.Status message.</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="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="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">status</span><span class="o">.</span><span class="n">SerializeToString</span><span class="p">()),))</span></div>
+    <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">status</span><span class="o">.</span><span class="n">SerializeToString</span><span class="p">()),))</span></div>
 </pre></div>
 </pre></div>
 
 
           </div>
           </div>

+ 13 - 16
python/_modules/grpc_testing.html

@@ -1,19 +1,17 @@
 
 
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!DOCTYPE html>
 
 
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
   <head>
   <head>
-    <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-    <title>grpc_testing &#8212; gRPC Python 1.26.0 documentation</title>
+    <meta charset="utf-8" />
+    <title>grpc_testing &#8212; gRPC Python 1.28.1 documentation</title>
     <link rel="stylesheet" href="../_static/alabaster.css" type="text/css" />
     <link rel="stylesheet" href="../_static/alabaster.css" type="text/css" />
     <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
     <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
-    <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
-    <script type="text/javascript" src="../_static/jquery.js"></script>
-    <script type="text/javascript" src="../_static/underscore.js"></script>
-    <script type="text/javascript" src="../_static/doctools.js"></script>
-    <script type="text/javascript" src="../_static/language_data.js"></script>
+    <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="index" title="Index" href="../genindex.html" />
     <link rel="search" title="Search" href="../search.html" />
     <link rel="search" title="Search" href="../search.html" />
    
    
@@ -31,7 +29,7 @@
 
 
 
 
 
 
-<p class="blurb">1.26.0</p>
+<p class="blurb">1.28.1</p>
 
 
 
 
 
 
@@ -42,6 +40,7 @@
 <p class="caption"><span class="caption-text">Contents:</span></p>
 <p class="caption"><span class="caption-text">Contents:</span></p>
 <ul>
 <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.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_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_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_reflection.html">gRPC Reflection</a></li>
@@ -60,17 +59,15 @@
 </ul>
 </ul>
 </div>
 </div>
 <div id="searchbox" style="display: none" role="search">
 <div id="searchbox" style="display: none" role="search">
-  <h3>Quick search</h3>
+  <h3 id="searchlabel">Quick search</h3>
     <div class="searchformwrapper">
     <div class="searchformwrapper">
     <form class="search" action="../search.html" method="get">
     <form class="search" action="../search.html" method="get">
-      <input type="text" name="q" />
+      <input type="text" name="q" aria-labelledby="searchlabel" />
       <input type="submit" value="Go" />
       <input type="submit" value="Go" />
-      <input type="hidden" name="check_keywords" value="yes" />
-      <input type="hidden" name="area" value="default" />
     </form>
     </form>
     </div>
     </div>
 </div>
 </div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
+<script>$('#searchbox').show(0);</script>
 
 
 
 
 
 

+ 21 - 17
python/_modules/index.html

@@ -1,19 +1,17 @@
 
 
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!DOCTYPE html>
 
 
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
   <head>
   <head>
-    <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-    <title>Overview: module code &#8212; gRPC Python 1.26.0 documentation</title>
+    <meta charset="utf-8" />
+    <title>Overview: module code &#8212; gRPC Python 1.28.1 documentation</title>
     <link rel="stylesheet" href="../_static/alabaster.css" type="text/css" />
     <link rel="stylesheet" href="../_static/alabaster.css" type="text/css" />
     <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
     <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
-    <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
-    <script type="text/javascript" src="../_static/jquery.js"></script>
-    <script type="text/javascript" src="../_static/underscore.js"></script>
-    <script type="text/javascript" src="../_static/doctools.js"></script>
-    <script type="text/javascript" src="../_static/language_data.js"></script>
+    <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="index" title="Index" href="../genindex.html" />
     <link rel="search" title="Search" href="../search.html" />
     <link rel="search" title="Search" href="../search.html" />
    
    
@@ -31,7 +29,7 @@
 
 
 
 
 
 
-<p class="blurb">1.26.0</p>
+<p class="blurb">1.28.1</p>
 
 
 
 
 
 
@@ -42,6 +40,7 @@
 <p class="caption"><span class="caption-text">Contents:</span></p>
 <p class="caption"><span class="caption-text">Contents:</span></p>
 <ul>
 <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.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_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_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_reflection.html">gRPC Reflection</a></li>
@@ -58,17 +57,15 @@
 </ul>
 </ul>
 </div>
 </div>
 <div id="searchbox" style="display: none" role="search">
 <div id="searchbox" style="display: none" role="search">
-  <h3>Quick search</h3>
+  <h3 id="searchlabel">Quick search</h3>
     <div class="searchformwrapper">
     <div class="searchformwrapper">
     <form class="search" action="../search.html" method="get">
     <form class="search" action="../search.html" method="get">
-      <input type="text" name="q" />
+      <input type="text" name="q" aria-labelledby="searchlabel" />
       <input type="submit" value="Go" />
       <input type="submit" value="Go" />
-      <input type="hidden" name="check_keywords" value="yes" />
-      <input type="hidden" name="area" value="default" />
     </form>
     </form>
     </div>
     </div>
 </div>
 </div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
+<script>$('#searchbox').show(0);</script>
 
 
 
 
 
 
@@ -87,7 +84,14 @@
             
             
   <h1>All modules for which code is available</h1>
   <h1>All modules for which code is available</h1>
 <ul><li><a href="grpc.html">grpc</a></li>
 <ul><li><a href="grpc.html">grpc</a></li>
-<ul><li><a href="grpc/_cython.html">grpc._cython</a></li>
+<ul><li><a href="grpc/_cython/cygrpc.html">grpc._cython.cygrpc</a></li>
+<li><a href="grpc/experimental/aio/_base_call.html">grpc.experimental.aio._base_call</a></li>
+<li><a href="grpc/experimental/aio/_base_channel.html">grpc.experimental.aio._base_channel</a></li>
+<li><a href="grpc/experimental/aio/_base_server.html">grpc.experimental.aio._base_server</a></li>
+<li><a href="grpc/experimental/aio/_call.html">grpc.experimental.aio._call</a></li>
+<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/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_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_reflection/v1alpha/reflection.html">grpc_reflection.v1alpha.reflection</a></li>

+ 132 - 0
python/_sources/grpc_asyncio.rst.txt

@@ -0,0 +1,132 @@
+gRPC AsyncIO API
+================
+
+.. module:: grpc.experimental.aio
+
+Overview
+--------
+
+gRPC AsyncIO API is the **new version** of gRPC Python whose architecture is
+tailored to AsyncIO. Underlying, it utilizes the same C-extension, gRPC C-Core,
+as existing stack, and it replaces all gRPC IO operations with methods provided
+by the AsyncIO library.
+
+This stack currently is under active development. Feel free to offer
+suggestions by opening issues on our GitHub repo `grpc/grpc <https://github.com/grpc/grpc>`_.
+
+The design doc can be found here as `gRFC <https://github.com/grpc/proposal/pull/155>`_.
+
+
+Caveats
+-------
+
+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
+
+    Enable AsyncIO for gRPC Python.
+
+    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>`_).
+
+
+Create Channel
+^^^^^^^^^^^^^^
+
+Channels are the abstraction of clients, where most of networking logic
+happens, for example, managing one or more underlying connections, name
+resolution, load balancing, flow control, etc.. If you are using ProtoBuf,
+Channel objects works best when further encapsulate into stub objects, then the
+application can invoke remote functions as if they are local functions.
+
+.. autofunction:: insecure_channel
+.. autofunction:: secure_channel
+
+
+Channel Object
+^^^^^^^^^^^^^^
+
+.. autoclass:: Channel
+
+
+Create Server
+^^^^^^^^^^^^^
+
+.. autofunction:: server
+
+
+Server Object
+^^^^^^^^^^^^^
+
+.. autoclass:: Server
+
+
+gRPC Exceptions
+^^^^^^^^^^^^^^^
+
+.. autoexception:: BaseError
+.. autoexception:: UsageError
+.. autoexception:: AbortError
+.. autoexception:: InternalError
+.. autoexception:: AioRpcError
+
+
+Shared Context
+^^^^^^^^^^^^^^^^^^^^
+
+.. autoclass:: RpcContext
+
+
+Client-Side Context
+^^^^^^^^^^^^^^^^^^^^^^^
+
+.. autoclass:: Call
+.. autoclass:: UnaryUnaryCall
+.. autoclass:: UnaryStreamCall
+.. autoclass:: StreamUnaryCall
+.. autoclass:: StreamStreamCall
+
+
+Server-Side Context
+^^^^^^^^^^^^^^^^^^^^^^^
+
+.. autoclass:: ServicerContext
+
+
+Client-Side Interceptor
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. autoclass:: ClientCallDetails
+.. autoclass:: InterceptedUnaryUnaryCall
+.. autoclass:: UnaryUnaryClientInterceptor
+
+.. Service-Side Context
+.. ^^^^^^^^^^^^^^^^^^^^
+
+.. .. autoclass:: ServicerContext
+
+
+Multi-Callable Interfaces
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. autoclass:: UnaryUnaryMultiCallable
+.. autoclass:: UnaryStreamMultiCallable()
+.. autoclass:: StreamUnaryMultiCallable()
+.. autoclass:: StreamStreamMultiCallable()

+ 1 - 0
python/_sources/index.rst.txt

@@ -10,6 +10,7 @@ API Reference
    :caption: Contents:
    :caption: Contents:
 
 
    grpc
    grpc
+   grpc_asyncio
    grpc_channelz
    grpc_channelz
    grpc_health_checking
    grpc_health_checking
    grpc_reflection
    grpc_reflection

BIN
python/_static/ajax-loader.gif


+ 94 - 2
python/_static/basic.css

@@ -4,7 +4,7 @@
  *
  *
  * Sphinx stylesheet -- basic theme.
  * Sphinx stylesheet -- basic theme.
  *
  *
- * :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS.
+ * :copyright: Copyright 2007-2020 by the Sphinx team, see AUTHORS.
  * :license: BSD, see LICENSE for details.
  * :license: BSD, see LICENSE for details.
  *
  *
  */
  */
@@ -231,6 +231,16 @@ a.headerlink {
     visibility: hidden;
     visibility: hidden;
 }
 }
 
 
+a.brackets:before,
+span.brackets > a:before{
+    content: "[";
+}
+
+a.brackets:after,
+span.brackets > a:after {
+    content: "]";
+}
+
 h1:hover > a.headerlink,
 h1:hover > a.headerlink,
 h2:hover > a.headerlink,
 h2:hover > a.headerlink,
 h3:hover > a.headerlink,
 h3:hover > a.headerlink,
@@ -279,6 +289,12 @@ img.align-center, .figure.align-center, object.align-center {
   margin-right: auto;
   margin-right: auto;
 }
 }
 
 
+img.align-default, .figure.align-default {
+  display: block;
+  margin-left: auto;
+  margin-right: auto;
+}
+
 .align-left {
 .align-left {
     text-align: left;
     text-align: left;
 }
 }
@@ -287,6 +303,10 @@ img.align-center, .figure.align-center, object.align-center {
     text-align: center;
     text-align: center;
 }
 }
 
 
+.align-default {
+    text-align: center;
+}
+
 .align-right {
 .align-right {
     text-align: right;
     text-align: right;
 }
 }
@@ -358,6 +378,11 @@ table.align-center {
     margin-right: auto;
     margin-right: auto;
 }
 }
 
 
+table.align-default {
+    margin-left: auto;
+    margin-right: auto;
+}
+
 table caption span.caption-number {
 table caption span.caption-number {
     font-style: italic;
     font-style: italic;
 }
 }
@@ -391,6 +416,16 @@ table.citation td {
     border-bottom: none;
     border-bottom: none;
 }
 }
 
 
+th > p:first-child,
+td > p:first-child {
+    margin-top: 0px;
+}
+
+th > p:last-child,
+td > p:last-child {
+    margin-bottom: 0px;
+}
+
 /* -- figures --------------------------------------------------------------- */
 /* -- figures --------------------------------------------------------------- */
 
 
 div.figure {
 div.figure {
@@ -460,11 +495,58 @@ ol.upperroman {
     list-style: upper-roman;
     list-style: upper-roman;
 }
 }
 
 
+li > p:first-child {
+    margin-top: 0px;
+}
+
+li > p:last-child {
+    margin-bottom: 0px;
+}
+
+dl.footnote > dt,
+dl.citation > dt {
+    float: left;
+}
+
+dl.footnote > dd,
+dl.citation > dd {
+    margin-bottom: 0em;
+}
+
+dl.footnote > dd:after,
+dl.citation > dd:after {
+    content: "";
+    clear: both;
+}
+
+dl.field-list {
+    display: grid;
+    grid-template-columns: fit-content(30%) auto;
+}
+
+dl.field-list > dt {
+    font-weight: bold;
+    word-break: break-word;
+    padding-left: 0.5em;
+    padding-right: 5px;
+}
+
+dl.field-list > dt:after {
+    content: ":";
+}
+
+dl.field-list > dd {
+    padding-left: 0.5em;
+    margin-top: 0em;
+    margin-left: 0em;
+    margin-bottom: 0em;
+}
+
 dl {
 dl {
     margin-bottom: 15px;
     margin-bottom: 15px;
 }
 }
 
 
-dd p {
+dd > p:first-child {
     margin-top: 0px;
     margin-top: 0px;
 }
 }
 
 
@@ -537,6 +619,12 @@ dl.glossary dt {
     font-style: oblique;
     font-style: oblique;
 }
 }
 
 
+.classifier:before {
+    font-style: normal;
+    margin: 0.5em;
+    content: ":";
+}
+
 abbr, acronym {
 abbr, acronym {
     border-bottom: dotted 1px;
     border-bottom: dotted 1px;
     cursor: help;
     cursor: help;
@@ -584,6 +672,10 @@ div.code-block-caption + div > div.highlight > pre {
     margin-top: 0;
     margin-top: 0;
 }
 }
 
 
+div.doctest > div.highlight span.gp {  /* gp: Generic.Prompt */
+    user-select: none;
+}
+
 div.code-block-caption span.caption-number {
 div.code-block-caption span.caption-number {
     padding: 0.1em 0.3em;
     padding: 0.1em 0.3em;
     font-style: italic;
     font-style: italic;

BIN
python/_static/comment-bright.png


BIN
python/_static/comment-close.png


BIN
python/_static/comment.png


+ 3 - 1
python/_static/custom.css

@@ -1 +1,3 @@
-/* This file intentionally left blank. */
+dl.field-list > dt {
+    word-break: keep-all !important;
+}

+ 6 - 6
python/_static/doctools.js

@@ -4,7 +4,7 @@
  *
  *
  * Sphinx JavaScript utilities for all documentation.
  * Sphinx JavaScript utilities for all documentation.
  *
  *
- * :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS.
+ * :copyright: Copyright 2007-2020 by the Sphinx team, see AUTHORS.
  * :license: BSD, see LICENSE for details.
  * :license: BSD, see LICENSE for details.
  *
  *
  */
  */
@@ -87,14 +87,13 @@ jQuery.fn.highlightText = function(text, className) {
           node.nextSibling));
           node.nextSibling));
         node.nodeValue = val.substr(0, pos);
         node.nodeValue = val.substr(0, pos);
         if (isInSVG) {
         if (isInSVG) {
-          var bbox = span.getBBox();
           var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
           var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
-       	  rect.x.baseVal.value = bbox.x;
+          var bbox = node.parentElement.getBBox();
+          rect.x.baseVal.value = bbox.x;
           rect.y.baseVal.value = bbox.y;
           rect.y.baseVal.value = bbox.y;
           rect.width.baseVal.value = bbox.width;
           rect.width.baseVal.value = bbox.width;
           rect.height.baseVal.value = bbox.height;
           rect.height.baseVal.value = bbox.height;
           rect.setAttribute('class', className);
           rect.setAttribute('class', className);
-          var parentOfText = node.parentNode.parentNode;
           addItems.push({
           addItems.push({
               "parent": node.parentNode,
               "parent": node.parentNode,
               "target": rect});
               "target": rect});
@@ -284,10 +283,11 @@ var Documentation = {
   },
   },
 
 
   initOnKeyListeners: function() {
   initOnKeyListeners: function() {
-    $(document).keyup(function(event) {
+    $(document).keydown(function(event) {
       var activeElementType = document.activeElement.tagName;
       var activeElementType = document.activeElement.tagName;
       // don't navigate when in search box or textarea
       // don't navigate when in search box or textarea
-      if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT') {
+      if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT'
+          && !event.altKey && !event.ctrlKey && !event.metaKey && !event.shiftKey) {
         switch (event.keyCode) {
         switch (event.keyCode) {
           case 37: // left
           case 37: // left
             var prevHref = $('link[rel="prev"]').prop('href');
             var prevHref = $('link[rel="prev"]').prop('href');

+ 3 - 2
python/_static/documentation_options.js

@@ -1,10 +1,11 @@
 var DOCUMENTATION_OPTIONS = {
 var DOCUMENTATION_OPTIONS = {
     URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'),
     URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'),
-    VERSION: '1.26.0',
+    VERSION: '1.28.1',
     LANGUAGE: 'en',
     LANGUAGE: 'en',
     COLLAPSE_INDEX: false,
     COLLAPSE_INDEX: false,
+    BUILDER: 'html',
     FILE_SUFFIX: '.html',
     FILE_SUFFIX: '.html',
     HAS_SOURCE: true,
     HAS_SOURCE: true,
     SOURCELINK_SUFFIX: '.txt',
     SOURCELINK_SUFFIX: '.txt',
-    NAVIGATION_WITH_KEYS: false,
+    NAVIGATION_WITH_KEYS: false
 };
 };

BIN
python/_static/down-pressed.png


BIN
python/_static/down.png


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 287 - 244
python/_static/jquery-3.4.1.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 1
python/_static/jquery.js


+ 1 - 1
python/_static/language_data.js

@@ -5,7 +5,7 @@
  * This script contains the language-specific data used by searchtools.js,
  * This script contains the language-specific data used by searchtools.js,
  * namely the list of stopwords, stemmer, scorer and splitter.
  * namely the list of stopwords, stemmer, scorer and splitter.
  *
  *
- * :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS.
+ * :copyright: Copyright 2007-2020 by the Sphinx team, see AUTHORS.
  * :license: BSD, see LICENSE for details.
  * :license: BSD, see LICENSE for details.
  *
  *
  */
  */

+ 54 - 23
python/_static/searchtools.js

@@ -4,7 +4,7 @@
  *
  *
  * Sphinx JavaScript utilities for the full-text search.
  * Sphinx JavaScript utilities for the full-text search.
  *
  *
- * :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS.
+ * :copyright: Copyright 2007-2020 by the Sphinx team, see AUTHORS.
  * :license: BSD, see LICENSE for details.
  * :license: BSD, see LICENSE for details.
  *
  *
  */
  */
@@ -36,8 +36,10 @@ if (!Scorer) {
 
 
     // query found in title
     // query found in title
     title: 15,
     title: 15,
+    partialTitle: 7,
     // query found in terms
     // query found in terms
-    term: 5
+    term: 5,
+    partialTerm: 2
   };
   };
 }
 }
 
 
@@ -56,6 +58,19 @@ var Search = {
   _queued_query : null,
   _queued_query : null,
   _pulse_status : -1,
   _pulse_status : -1,
 
 
+  htmlToText : function(htmlString) {
+      var htmlElement = document.createElement('span');
+      htmlElement.innerHTML = htmlString;
+      $(htmlElement).find('.headerlink').remove();
+      docContent = $(htmlElement).find('[role=main]')[0];
+      if(docContent === undefined) {
+          console.warn("Content block not found. Sphinx search tries to obtain it " +
+                       "via '[role=main]'. Could you check your theme or template.");
+          return "";
+      }
+      return docContent.textContent || docContent.innerText;
+  },
+
   init : function() {
   init : function() {
       var params = $.getQueryParameters();
       var params = $.getQueryParameters();
       if (params.q) {
       if (params.q) {
@@ -120,7 +135,7 @@ var Search = {
     this.out = $('#search-results');
     this.out = $('#search-results');
     this.title = $('<h2>' + _('Searching') + '</h2>').appendTo(this.out);
     this.title = $('<h2>' + _('Searching') + '</h2>').appendTo(this.out);
     this.dots = $('<span></span>').appendTo(this.title);
     this.dots = $('<span></span>').appendTo(this.title);
-    this.status = $('<p style="display: none"></p>').appendTo(this.out);
+    this.status = $('<p class="search-summary">&nbsp;</p>').appendTo(this.out);
     this.output = $('<ul class="search"/>').appendTo(this.out);
     this.output = $('<ul class="search"/>').appendTo(this.out);
 
 
     $('#search-progress').text(_('Preparing search...'));
     $('#search-progress').text(_('Preparing search...'));
@@ -235,7 +250,8 @@ var Search = {
       if (results.length) {
       if (results.length) {
         var item = results.pop();
         var item = results.pop();
         var listItem = $('<li style="display:none"></li>');
         var listItem = $('<li style="display:none"></li>');
-        if (DOCUMENTATION_OPTIONS.FILE_SUFFIX === '') {
+        var requestUrl = "";
+        if (DOCUMENTATION_OPTIONS.BUILDER === 'dirhtml') {
           // dirhtml builder
           // dirhtml builder
           var dirname = item[0] + '/';
           var dirname = item[0] + '/';
           if (dirname.match(/\/index\/$/)) {
           if (dirname.match(/\/index\/$/)) {
@@ -243,15 +259,15 @@ var Search = {
           } else if (dirname == 'index/') {
           } else if (dirname == 'index/') {
             dirname = '';
             dirname = '';
           }
           }
-          listItem.append($('<a/>').attr('href',
-            DOCUMENTATION_OPTIONS.URL_ROOT + dirname +
-            highlightstring + item[2]).html(item[1]));
+          requestUrl = DOCUMENTATION_OPTIONS.URL_ROOT + dirname;
+
         } else {
         } else {
           // normal html builders
           // normal html builders
-          listItem.append($('<a/>').attr('href',
-            item[0] + DOCUMENTATION_OPTIONS.FILE_SUFFIX +
-            highlightstring + item[2]).html(item[1]));
+          requestUrl = DOCUMENTATION_OPTIONS.URL_ROOT + item[0] + DOCUMENTATION_OPTIONS.FILE_SUFFIX;
         }
         }
+        listItem.append($('<a/>').attr('href',
+            requestUrl +
+            highlightstring + item[2]).html(item[1]));
         if (item[3]) {
         if (item[3]) {
           listItem.append($('<span> (' + item[3] + ')</span>'));
           listItem.append($('<span> (' + item[3] + ')</span>'));
           Search.output.append(listItem);
           Search.output.append(listItem);
@@ -259,11 +275,7 @@ var Search = {
             displayNextItem();
             displayNextItem();
           });
           });
         } else if (DOCUMENTATION_OPTIONS.HAS_SOURCE) {
         } else if (DOCUMENTATION_OPTIONS.HAS_SOURCE) {
-          var suffix = DOCUMENTATION_OPTIONS.SOURCELINK_SUFFIX;
-          if (suffix === undefined) {
-            suffix = '.txt';
-          }
-          $.ajax({url: DOCUMENTATION_OPTIONS.URL_ROOT + '_sources/' + item[5] + (item[5].slice(-suffix.length) === suffix ? '' : suffix),
+          $.ajax({url: requestUrl,
                   dataType: "text",
                   dataType: "text",
                   complete: function(jqxhr, textstatus) {
                   complete: function(jqxhr, textstatus) {
                     var data = jqxhr.responseText;
                     var data = jqxhr.responseText;
@@ -313,12 +325,13 @@ var Search = {
     for (var prefix in objects) {
     for (var prefix in objects) {
       for (var name in objects[prefix]) {
       for (var name in objects[prefix]) {
         var fullname = (prefix ? prefix + '.' : '') + name;
         var fullname = (prefix ? prefix + '.' : '') + name;
-        if (fullname.toLowerCase().indexOf(object) > -1) {
+        var fullnameLower = fullname.toLowerCase()
+        if (fullnameLower.indexOf(object) > -1) {
           var score = 0;
           var score = 0;
-          var parts = fullname.split('.');
+          var parts = fullnameLower.split('.');
           // check for different match types: exact matches of full name or
           // check for different match types: exact matches of full name or
           // "last name" (i.e. last dotted part)
           // "last name" (i.e. last dotted part)
-          if (fullname == object || parts[parts.length - 1] == object) {
+          if (fullnameLower == object || parts[parts.length - 1] == object) {
             score += Scorer.objNameMatch;
             score += Scorer.objNameMatch;
           // matches in last name
           // matches in last name
           } else if (parts[parts.length - 1].indexOf(object) > -1) {
           } else if (parts[parts.length - 1].indexOf(object) > -1) {
@@ -385,6 +398,19 @@ var Search = {
         {files: terms[word], score: Scorer.term},
         {files: terms[word], score: Scorer.term},
         {files: titleterms[word], score: Scorer.title}
         {files: titleterms[word], score: Scorer.title}
       ];
       ];
+      // add support for partial matches
+      if (word.length > 2) {
+        for (var w in terms) {
+          if (w.match(word) && !terms[word]) {
+            _o.push({files: terms[w], score: Scorer.partialTerm})
+          }
+        }
+        for (var w in titleterms) {
+          if (w.match(word) && !titleterms[word]) {
+              _o.push({files: titleterms[w], score: Scorer.partialTitle})
+          }
+        }
+      }
 
 
       // no match but word was a required one
       // no match but word was a required one
       if ($u.every(_o, function(o){return o.files === undefined;})) {
       if ($u.every(_o, function(o){return o.files === undefined;})) {
@@ -404,7 +430,7 @@ var Search = {
         for (j = 0; j < _files.length; j++) {
         for (j = 0; j < _files.length; j++) {
           file = _files[j];
           file = _files[j];
           if (!(file in scoreMap))
           if (!(file in scoreMap))
-            scoreMap[file] = {}
+            scoreMap[file] = {};
           scoreMap[file][word] = o.score;
           scoreMap[file][word] = o.score;
         }
         }
       });
       });
@@ -412,7 +438,7 @@ var Search = {
       // create the mapping
       // create the mapping
       for (j = 0; j < files.length; j++) {
       for (j = 0; j < files.length; j++) {
         file = files[j];
         file = files[j];
-        if (file in fileMap)
+        if (file in fileMap && fileMap[file].indexOf(word) === -1)
           fileMap[file].push(word);
           fileMap[file].push(word);
         else
         else
           fileMap[file] = [word];
           fileMap[file] = [word];
@@ -424,8 +450,12 @@ var Search = {
       var valid = true;
       var valid = true;
 
 
       // check if all requirements are matched
       // check if all requirements are matched
-      if (fileMap[file].length != searchterms.length)
-          continue;
+      var filteredTermCount = // as search terms with length < 3 are discarded: ignore
+        searchterms.filter(function(term){return term.length > 2}).length
+      if (
+        fileMap[file].length != searchterms.length &&
+        fileMap[file].length != filteredTermCount
+      ) continue;
 
 
       // ensure that none of the excluded terms is in the search result
       // ensure that none of the excluded terms is in the search result
       for (i = 0; i < excluded.length; i++) {
       for (i = 0; i < excluded.length; i++) {
@@ -456,7 +486,8 @@ var Search = {
    * words. the first one is used to find the occurrence, the
    * words. the first one is used to find the occurrence, the
    * latter for highlighting it.
    * latter for highlighting it.
    */
    */
-  makeSearchSummary : function(text, keywords, hlwords) {
+  makeSearchSummary : function(htmlText, keywords, hlwords) {
+    var text = Search.htmlToText(htmlText);
     var textLower = text.toLowerCase();
     var textLower = text.toLowerCase();
     var start = 0;
     var start = 0;
     $.each(keywords, function() {
     $.each(keywords, function() {

BIN
python/_static/up-pressed.png


BIN
python/_static/up.png


+ 0 - 808
python/_static/websupport.js

@@ -1,808 +0,0 @@
-/*
- * websupport.js
- * ~~~~~~~~~~~~~
- *
- * sphinx.websupport utilities for all documentation.
- *
- * :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS.
- * :license: BSD, see LICENSE for details.
- *
- */
-
-(function($) {
-  $.fn.autogrow = function() {
-    return this.each(function() {
-    var textarea = this;
-
-    $.fn.autogrow.resize(textarea);
-
-    $(textarea)
-      .focus(function() {
-        textarea.interval = setInterval(function() {
-          $.fn.autogrow.resize(textarea);
-        }, 500);
-      })
-      .blur(function() {
-        clearInterval(textarea.interval);
-      });
-    });
-  };
-
-  $.fn.autogrow.resize = function(textarea) {
-    var lineHeight = parseInt($(textarea).css('line-height'), 10);
-    var lines = textarea.value.split('\n');
-    var columns = textarea.cols;
-    var lineCount = 0;
-    $.each(lines, function() {
-      lineCount += Math.ceil(this.length / columns) || 1;
-    });
-    var height = lineHeight * (lineCount + 1);
-    $(textarea).css('height', height);
-  };
-})(jQuery);
-
-(function($) {
-  var comp, by;
-
-  function init() {
-    initEvents();
-    initComparator();
-  }
-
-  function initEvents() {
-    $(document).on("click", 'a.comment-close', function(event) {
-      event.preventDefault();
-      hide($(this).attr('id').substring(2));
-    });
-    $(document).on("click", 'a.vote', function(event) {
-      event.preventDefault();
-      handleVote($(this));
-    });
-    $(document).on("click", 'a.reply', function(event) {
-      event.preventDefault();
-      openReply($(this).attr('id').substring(2));
-    });
-    $(document).on("click", 'a.close-reply', function(event) {
-      event.preventDefault();
-      closeReply($(this).attr('id').substring(2));
-    });
-    $(document).on("click", 'a.sort-option', function(event) {
-      event.preventDefault();
-      handleReSort($(this));
-    });
-    $(document).on("click", 'a.show-proposal', function(event) {
-      event.preventDefault();
-      showProposal($(this).attr('id').substring(2));
-    });
-    $(document).on("click", 'a.hide-proposal', function(event) {
-      event.preventDefault();
-      hideProposal($(this).attr('id').substring(2));
-    });
-    $(document).on("click", 'a.show-propose-change', function(event) {
-      event.preventDefault();
-      showProposeChange($(this).attr('id').substring(2));
-    });
-    $(document).on("click", 'a.hide-propose-change', function(event) {
-      event.preventDefault();
-      hideProposeChange($(this).attr('id').substring(2));
-    });
-    $(document).on("click", 'a.accept-comment', function(event) {
-      event.preventDefault();
-      acceptComment($(this).attr('id').substring(2));
-    });
-    $(document).on("click", 'a.delete-comment', function(event) {
-      event.preventDefault();
-      deleteComment($(this).attr('id').substring(2));
-    });
-    $(document).on("click", 'a.comment-markup', function(event) {
-      event.preventDefault();
-      toggleCommentMarkupBox($(this).attr('id').substring(2));
-    });
-  }
-
-  /**
-   * Set comp, which is a comparator function used for sorting and
-   * inserting comments into the list.
-   */
-  function setComparator() {
-    // If the first three letters are "asc", sort in ascending order
-    // and remove the prefix.
-    if (by.substring(0,3) == 'asc') {
-      var i = by.substring(3);
-      comp = function(a, b) { return a[i] - b[i]; };
-    } else {
-      // Otherwise sort in descending order.
-      comp = function(a, b) { return b[by] - a[by]; };
-    }
-
-    // Reset link styles and format the selected sort option.
-    $('a.sel').attr('href', '#').removeClass('sel');
-    $('a.by' + by).removeAttr('href').addClass('sel');
-  }
-
-  /**
-   * Create a comp function. If the user has preferences stored in
-   * the sortBy cookie, use those, otherwise use the default.
-   */
-  function initComparator() {
-    by = 'rating'; // Default to sort by rating.
-    // If the sortBy cookie is set, use that instead.
-    if (document.cookie.length > 0) {
-      var start = document.cookie.indexOf('sortBy=');
-      if (start != -1) {
-        start = start + 7;
-        var end = document.cookie.indexOf(";", start);
-        if (end == -1) {
-          end = document.cookie.length;
-          by = unescape(document.cookie.substring(start, end));
-        }
-      }
-    }
-    setComparator();
-  }
-
-  /**
-   * Show a comment div.
-   */
-  function show(id) {
-    $('#ao' + id).hide();
-    $('#ah' + id).show();
-    var context = $.extend({id: id}, opts);
-    var popup = $(renderTemplate(popupTemplate, context)).hide();
-    popup.find('textarea[name="proposal"]').hide();
-    popup.find('a.by' + by).addClass('sel');
-    var form = popup.find('#cf' + id);
-    form.submit(function(event) {
-      event.preventDefault();
-      addComment(form);
-    });
-    $('#s' + id).after(popup);
-    popup.slideDown('fast', function() {
-      getComments(id);
-    });
-  }
-
-  /**
-   * Hide a comment div.
-   */
-  function hide(id) {
-    $('#ah' + id).hide();
-    $('#ao' + id).show();
-    var div = $('#sc' + id);
-    div.slideUp('fast', function() {
-      div.remove();
-    });
-  }
-
-  /**
-   * Perform an ajax request to get comments for a node
-   * and insert the comments into the comments tree.
-   */
-  function getComments(id) {
-    $.ajax({
-     type: 'GET',
-     url: opts.getCommentsURL,
-     data: {node: id},
-     success: function(data, textStatus, request) {
-       var ul = $('#cl' + id);
-       var speed = 100;
-       $('#cf' + id)
-         .find('textarea[name="proposal"]')
-         .data('source', data.source);
-
-       if (data.comments.length === 0) {
-         ul.html('<li>No comments yet.</li>');
-         ul.data('empty', true);
-       } else {
-         // If there are comments, sort them and put them in the list.
-         var comments = sortComments(data.comments);
-         speed = data.comments.length * 100;
-         appendComments(comments, ul);
-         ul.data('empty', false);
-       }
-       $('#cn' + id).slideUp(speed + 200);
-       ul.slideDown(speed);
-     },
-     error: function(request, textStatus, error) {
-       showError('Oops, there was a problem retrieving the comments.');
-     },
-     dataType: 'json'
-    });
-  }
-
-  /**
-   * Add a comment via ajax and insert the comment into the comment tree.
-   */
-  function addComment(form) {
-    var node_id = form.find('input[name="node"]').val();
-    var parent_id = form.find('input[name="parent"]').val();
-    var text = form.find('textarea[name="comment"]').val();
-    var proposal = form.find('textarea[name="proposal"]').val();
-
-    if (text == '') {
-      showError('Please enter a comment.');
-      return;
-    }
-
-    // Disable the form that is being submitted.
-    form.find('textarea,input').attr('disabled', 'disabled');
-
-    // Send the comment to the server.
-    $.ajax({
-      type: "POST",
-      url: opts.addCommentURL,
-      dataType: 'json',
-      data: {
-        node: node_id,
-        parent: parent_id,
-        text: text,
-        proposal: proposal
-      },
-      success: function(data, textStatus, error) {
-        // Reset the form.
-        if (node_id) {
-          hideProposeChange(node_id);
-        }
-        form.find('textarea')
-          .val('')
-          .add(form.find('input'))
-          .removeAttr('disabled');
-	var ul = $('#cl' + (node_id || parent_id));
-        if (ul.data('empty')) {
-          $(ul).empty();
-          ul.data('empty', false);
-        }
-        insertComment(data.comment);
-        var ao = $('#ao' + node_id);
-        ao.find('img').attr({'src': opts.commentBrightImage});
-        if (node_id) {
-          // if this was a "root" comment, remove the commenting box
-          // (the user can get it back by reopening the comment popup)
-          $('#ca' + node_id).slideUp();
-        }
-      },
-      error: function(request, textStatus, error) {
-        form.find('textarea,input').removeAttr('disabled');
-        showError('Oops, there was a problem adding the comment.');
-      }
-    });
-  }
-
-  /**
-   * Recursively append comments to the main comment list and children
-   * lists, creating the comment tree.
-   */
-  function appendComments(comments, ul) {
-    $.each(comments, function() {
-      var div = createCommentDiv(this);
-      ul.append($(document.createElement('li')).html(div));
-      appendComments(this.children, div.find('ul.comment-children'));
-      // To avoid stagnating data, don't store the comments children in data.
-      this.children = null;
-      div.data('comment', this);
-    });
-  }
-
-  /**
-   * After adding a new comment, it must be inserted in the correct
-   * location in the comment tree.
-   */
-  function insertComment(comment) {
-    var div = createCommentDiv(comment);
-
-    // To avoid stagnating data, don't store the comments children in data.
-    comment.children = null;
-    div.data('comment', comment);
-
-    var ul = $('#cl' + (comment.node || comment.parent));
-    var siblings = getChildren(ul);
-
-    var li = $(document.createElement('li'));
-    li.hide();
-
-    // Determine where in the parents children list to insert this comment.
-    for(var i=0; i < siblings.length; i++) {
-      if (comp(comment, siblings[i]) <= 0) {
-        $('#cd' + siblings[i].id)
-          .parent()
-          .before(li.html(div));
-        li.slideDown('fast');
-        return;
-      }
-    }
-
-    // If we get here, this comment rates lower than all the others,
-    // or it is the only comment in the list.
-    ul.append(li.html(div));
-    li.slideDown('fast');
-  }
-
-  function acceptComment(id) {
-    $.ajax({
-      type: 'POST',
-      url: opts.acceptCommentURL,
-      data: {id: id},
-      success: function(data, textStatus, request) {
-        $('#cm' + id).fadeOut('fast');
-        $('#cd' + id).removeClass('moderate');
-      },
-      error: function(request, textStatus, error) {
-        showError('Oops, there was a problem accepting the comment.');
-      }
-    });
-  }
-
-  function deleteComment(id) {
-    $.ajax({
-      type: 'POST',
-      url: opts.deleteCommentURL,
-      data: {id: id},
-      success: function(data, textStatus, request) {
-        var div = $('#cd' + id);
-        if (data == 'delete') {
-          // Moderator mode: remove the comment and all children immediately
-          div.slideUp('fast', function() {
-            div.remove();
-          });
-          return;
-        }
-        // User mode: only mark the comment as deleted
-        div
-          .find('span.user-id:first')
-          .text('[deleted]').end()
-          .find('div.comment-text:first')
-          .text('[deleted]').end()
-          .find('#cm' + id + ', #dc' + id + ', #ac' + id + ', #rc' + id +
-                ', #sp' + id + ', #hp' + id + ', #cr' + id + ', #rl' + id)
-          .remove();
-        var comment = div.data('comment');
-        comment.username = '[deleted]';
-        comment.text = '[deleted]';
-        div.data('comment', comment);
-      },
-      error: function(request, textStatus, error) {
-        showError('Oops, there was a problem deleting the comment.');
-      }
-    });
-  }
-
-  function showProposal(id) {
-    $('#sp' + id).hide();
-    $('#hp' + id).show();
-    $('#pr' + id).slideDown('fast');
-  }
-
-  function hideProposal(id) {
-    $('#hp' + id).hide();
-    $('#sp' + id).show();
-    $('#pr' + id).slideUp('fast');
-  }
-
-  function showProposeChange(id) {
-    $('#pc' + id).hide();
-    $('#hc' + id).show();
-    var textarea = $('#pt' + id);
-    textarea.val(textarea.data('source'));
-    $.fn.autogrow.resize(textarea[0]);
-    textarea.slideDown('fast');
-  }
-
-  function hideProposeChange(id) {
-    $('#hc' + id).hide();
-    $('#pc' + id).show();
-    var textarea = $('#pt' + id);
-    textarea.val('').removeAttr('disabled');
-    textarea.slideUp('fast');
-  }
-
-  function toggleCommentMarkupBox(id) {
-    $('#mb' + id).toggle();
-  }
-
-  /** Handle when the user clicks on a sort by link. */
-  function handleReSort(link) {
-    var classes = link.attr('class').split(/\s+/);
-    for (var i=0; i<classes.length; i++) {
-      if (classes[i] != 'sort-option') {
-	by = classes[i].substring(2);
-      }
-    }
-    setComparator();
-    // Save/update the sortBy cookie.
-    var expiration = new Date();
-    expiration.setDate(expiration.getDate() + 365);
-    document.cookie= 'sortBy=' + escape(by) +
-                     ';expires=' + expiration.toUTCString();
-    $('ul.comment-ul').each(function(index, ul) {
-      var comments = getChildren($(ul), true);
-      comments = sortComments(comments);
-      appendComments(comments, $(ul).empty());
-    });
-  }
-
-  /**
-   * Function to process a vote when a user clicks an arrow.
-   */
-  function handleVote(link) {
-    if (!opts.voting) {
-      showError("You'll need to login to vote.");
-      return;
-    }
-
-    var id = link.attr('id');
-    if (!id) {
-      // Didn't click on one of the voting arrows.
-      return;
-    }
-    // If it is an unvote, the new vote value is 0,
-    // Otherwise it's 1 for an upvote, or -1 for a downvote.
-    var value = 0;
-    if (id.charAt(1) != 'u') {
-      value = id.charAt(0) == 'u' ? 1 : -1;
-    }
-    // The data to be sent to the server.
-    var d = {
-      comment_id: id.substring(2),
-      value: value
-    };
-
-    // Swap the vote and unvote links.
-    link.hide();
-    $('#' + id.charAt(0) + (id.charAt(1) == 'u' ? 'v' : 'u') + d.comment_id)
-      .show();
-
-    // The div the comment is displayed in.
-    var div = $('div#cd' + d.comment_id);
-    var data = div.data('comment');
-
-    // If this is not an unvote, and the other vote arrow has
-    // already been pressed, unpress it.
-    if ((d.value !== 0) && (data.vote === d.value * -1)) {
-      $('#' + (d.value == 1 ? 'd' : 'u') + 'u' + d.comment_id).hide();
-      $('#' + (d.value == 1 ? 'd' : 'u') + 'v' + d.comment_id).show();
-    }
-
-    // Update the comments rating in the local data.
-    data.rating += (data.vote === 0) ? d.value : (d.value - data.vote);
-    data.vote = d.value;
-    div.data('comment', data);
-
-    // Change the rating text.
-    div.find('.rating:first')
-      .text(data.rating + ' point' + (data.rating == 1 ? '' : 's'));
-
-    // Send the vote information to the server.
-    $.ajax({
-      type: "POST",
-      url: opts.processVoteURL,
-      data: d,
-      error: function(request, textStatus, error) {
-        showError('Oops, there was a problem casting that vote.');
-      }
-    });
-  }
-
-  /**
-   * Open a reply form used to reply to an existing comment.
-   */
-  function openReply(id) {
-    // Swap out the reply link for the hide link
-    $('#rl' + id).hide();
-    $('#cr' + id).show();
-
-    // Add the reply li to the children ul.
-    var div = $(renderTemplate(replyTemplate, {id: id})).hide();
-    $('#cl' + id)
-      .prepend(div)
-      // Setup the submit handler for the reply form.
-      .find('#rf' + id)
-      .submit(function(event) {
-        event.preventDefault();
-        addComment($('#rf' + id));
-        closeReply(id);
-      })
-      .find('input[type=button]')
-      .click(function() {
-        closeReply(id);
-      });
-    div.slideDown('fast', function() {
-      $('#rf' + id).find('textarea').focus();
-    });
-  }
-
-  /**
-   * Close the reply form opened with openReply.
-   */
-  function closeReply(id) {
-    // Remove the reply div from the DOM.
-    $('#rd' + id).slideUp('fast', function() {
-      $(this).remove();
-    });
-
-    // Swap out the hide link for the reply link
-    $('#cr' + id).hide();
-    $('#rl' + id).show();
-  }
-
-  /**
-   * Recursively sort a tree of comments using the comp comparator.
-   */
-  function sortComments(comments) {
-    comments.sort(comp);
-    $.each(comments, function() {
-      this.children = sortComments(this.children);
-    });
-    return comments;
-  }
-
-  /**
-   * Get the children comments from a ul. If recursive is true,
-   * recursively include childrens' children.
-   */
-  function getChildren(ul, recursive) {
-    var children = [];
-    ul.children().children("[id^='cd']")
-      .each(function() {
-        var comment = $(this).data('comment');
-        if (recursive)
-          comment.children = getChildren($(this).find('#cl' + comment.id), true);
-        children.push(comment);
-      });
-    return children;
-  }
-
-  /** Create a div to display a comment in. */
-  function createCommentDiv(comment) {
-    if (!comment.displayed && !opts.moderator) {
-      return $('<div class="moderate">Thank you!  Your comment will show up '
-               + 'once it is has been approved by a moderator.</div>');
-    }
-    // Prettify the comment rating.
-    comment.pretty_rating = comment.rating + ' point' +
-      (comment.rating == 1 ? '' : 's');
-    // Make a class (for displaying not yet moderated comments differently)
-    comment.css_class = comment.displayed ? '' : ' moderate';
-    // Create a div for this comment.
-    var context = $.extend({}, opts, comment);
-    var div = $(renderTemplate(commentTemplate, context));
-
-    // If the user has voted on this comment, highlight the correct arrow.
-    if (comment.vote) {
-      var direction = (comment.vote == 1) ? 'u' : 'd';
-      div.find('#' + direction + 'v' + comment.id).hide();
-      div.find('#' + direction + 'u' + comment.id).show();
-    }
-
-    if (opts.moderator || comment.text != '[deleted]') {
-      div.find('a.reply').show();
-      if (comment.proposal_diff)
-        div.find('#sp' + comment.id).show();
-      if (opts.moderator && !comment.displayed)
-        div.find('#cm' + comment.id).show();
-      if (opts.moderator || (opts.username == comment.username))
-        div.find('#dc' + comment.id).show();
-    }
-    return div;
-  }
-
-  /**
-   * A simple template renderer. Placeholders such as <%id%> are replaced
-   * by context['id'] with items being escaped. Placeholders such as <#id#>
-   * are not escaped.
-   */
-  function renderTemplate(template, context) {
-    var esc = $(document.createElement('div'));
-
-    function handle(ph, escape) {
-      var cur = context;
-      $.each(ph.split('.'), function() {
-        cur = cur[this];
-      });
-      return escape ? esc.text(cur || "").html() : cur;
-    }
-
-    return template.replace(/<([%#])([\w\.]*)\1>/g, function() {
-      return handle(arguments[2], arguments[1] == '%' ? true : false);
-    });
-  }
-
-  /** Flash an error message briefly. */
-  function showError(message) {
-    $(document.createElement('div')).attr({'class': 'popup-error'})
-      .append($(document.createElement('div'))
-               .attr({'class': 'error-message'}).text(message))
-      .appendTo('body')
-      .fadeIn("slow")
-      .delay(2000)
-      .fadeOut("slow");
-  }
-
-  /** Add a link the user uses to open the comments popup. */
-  $.fn.comment = function() {
-    return this.each(function() {
-      var id = $(this).attr('id').substring(1);
-      var count = COMMENT_METADATA[id];
-      var title = count + ' comment' + (count == 1 ? '' : 's');
-      var image = count > 0 ? opts.commentBrightImage : opts.commentImage;
-      var addcls = count == 0 ? ' nocomment' : '';
-      $(this)
-        .append(
-          $(document.createElement('a')).attr({
-            href: '#',
-            'class': 'sphinx-comment-open' + addcls,
-            id: 'ao' + id
-          })
-            .append($(document.createElement('img')).attr({
-              src: image,
-              alt: 'comment',
-              title: title
-            }))
-            .click(function(event) {
-              event.preventDefault();
-              show($(this).attr('id').substring(2));
-            })
-        )
-        .append(
-          $(document.createElement('a')).attr({
-            href: '#',
-            'class': 'sphinx-comment-close hidden',
-            id: 'ah' + id
-          })
-            .append($(document.createElement('img')).attr({
-              src: opts.closeCommentImage,
-              alt: 'close',
-              title: 'close'
-            }))
-            .click(function(event) {
-              event.preventDefault();
-              hide($(this).attr('id').substring(2));
-            })
-        );
-    });
-  };
-
-  var opts = {
-    processVoteURL: '/_process_vote',
-    addCommentURL: '/_add_comment',
-    getCommentsURL: '/_get_comments',
-    acceptCommentURL: '/_accept_comment',
-    deleteCommentURL: '/_delete_comment',
-    commentImage: '/static/_static/comment.png',
-    closeCommentImage: '/static/_static/comment-close.png',
-    loadingImage: '/static/_static/ajax-loader.gif',
-    commentBrightImage: '/static/_static/comment-bright.png',
-    upArrow: '/static/_static/up.png',
-    downArrow: '/static/_static/down.png',
-    upArrowPressed: '/static/_static/up-pressed.png',
-    downArrowPressed: '/static/_static/down-pressed.png',
-    voting: false,
-    moderator: false
-  };
-
-  if (typeof COMMENT_OPTIONS != "undefined") {
-    opts = jQuery.extend(opts, COMMENT_OPTIONS);
-  }
-
-  var popupTemplate = '\
-    <div class="sphinx-comments" id="sc<%id%>">\
-      <p class="sort-options">\
-        Sort by:\
-        <a href="#" class="sort-option byrating">best rated</a>\
-        <a href="#" class="sort-option byascage">newest</a>\
-        <a href="#" class="sort-option byage">oldest</a>\
-      </p>\
-      <div class="comment-header">Comments</div>\
-      <div class="comment-loading" id="cn<%id%>">\
-        loading comments... <img src="<%loadingImage%>" alt="" /></div>\
-      <ul id="cl<%id%>" class="comment-ul"></ul>\
-      <div id="ca<%id%>">\
-      <p class="add-a-comment">Add a comment\
-        (<a href="#" class="comment-markup" id="ab<%id%>">markup</a>):</p>\
-      <div class="comment-markup-box" id="mb<%id%>">\
-        reStructured text markup: <i>*emph*</i>, <b>**strong**</b>, \
-        <code>``code``</code>, \
-        code blocks: <code>::</code> and an indented block after blank line</div>\
-      <form method="post" id="cf<%id%>" class="comment-form" action="">\
-        <textarea name="comment" cols="80"></textarea>\
-        <p class="propose-button">\
-          <a href="#" id="pc<%id%>" class="show-propose-change">\
-            Propose a change &#9657;\
-          </a>\
-          <a href="#" id="hc<%id%>" class="hide-propose-change">\
-            Propose a change &#9663;\
-          </a>\
-        </p>\
-        <textarea name="proposal" id="pt<%id%>" cols="80"\
-                  spellcheck="false"></textarea>\
-        <input type="submit" value="Add comment" />\
-        <input type="hidden" name="node" value="<%id%>" />\
-        <input type="hidden" name="parent" value="" />\
-      </form>\
-      </div>\
-    </div>';
-
-  var commentTemplate = '\
-    <div id="cd<%id%>" class="sphinx-comment<%css_class%>">\
-      <div class="vote">\
-        <div class="arrow">\
-          <a href="#" id="uv<%id%>" class="vote" title="vote up">\
-            <img src="<%upArrow%>" />\
-          </a>\
-          <a href="#" id="uu<%id%>" class="un vote" title="vote up">\
-            <img src="<%upArrowPressed%>" />\
-          </a>\
-        </div>\
-        <div class="arrow">\
-          <a href="#" id="dv<%id%>" class="vote" title="vote down">\
-            <img src="<%downArrow%>" id="da<%id%>" />\
-          </a>\
-          <a href="#" id="du<%id%>" class="un vote" title="vote down">\
-            <img src="<%downArrowPressed%>" />\
-          </a>\
-        </div>\
-      </div>\
-      <div class="comment-content">\
-        <p class="tagline comment">\
-          <span class="user-id"><%username%></span>\
-          <span class="rating"><%pretty_rating%></span>\
-          <span class="delta"><%time.delta%></span>\
-        </p>\
-        <div class="comment-text comment"><#text#></div>\
-        <p class="comment-opts comment">\
-          <a href="#" class="reply hidden" id="rl<%id%>">reply &#9657;</a>\
-          <a href="#" class="close-reply" id="cr<%id%>">reply &#9663;</a>\
-          <a href="#" id="sp<%id%>" class="show-proposal">proposal &#9657;</a>\
-          <a href="#" id="hp<%id%>" class="hide-proposal">proposal &#9663;</a>\
-          <a href="#" id="dc<%id%>" class="delete-comment hidden">delete</a>\
-          <span id="cm<%id%>" class="moderation hidden">\
-            <a href="#" id="ac<%id%>" class="accept-comment">accept</a>\
-          </span>\
-        </p>\
-        <pre class="proposal" id="pr<%id%>">\
-<#proposal_diff#>\
-        </pre>\
-          <ul class="comment-children" id="cl<%id%>"></ul>\
-        </div>\
-        <div class="clearleft"></div>\
-      </div>\
-    </div>';
-
-  var replyTemplate = '\
-    <li>\
-      <div class="reply-div" id="rd<%id%>">\
-        <form id="rf<%id%>">\
-          <textarea name="comment" cols="80"></textarea>\
-          <input type="submit" value="Add reply" />\
-          <input type="button" value="Cancel" />\
-          <input type="hidden" name="parent" value="<%id%>" />\
-          <input type="hidden" name="node" value="" />\
-        </form>\
-      </div>\
-    </li>';
-
-  $(document).ready(function() {
-    init();
-  });
-})(jQuery);
-
-$(document).ready(function() {
-  // add comment anchors for all paragraphs that are commentable
-  $('.sphinx-has-comment').comment();
-
-  // highlight search words in search results
-  $("div.context").each(function() {
-    var params = $.getQueryParameters();
-    var terms = (params.q) ? params.q[0].split(/\s+/) : [];
-    var result = $(this);
-    $.each(terms, function() {
-      result.highlightText(this.toLowerCase(), 'highlighted');
-    });
-  });
-
-  // directly open comment window if requested
-  var anchor = document.location.hash;
-  if (anchor.substring(0, 9) == '#comment-') {
-    $('#ao' + anchor.substring(9)).click();
-    document.location.hash = '#s' + anchor.substring(9);
-  }
-});

+ 333 - 45
python/genindex.html

@@ -1,20 +1,18 @@
 
 
 
 
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!DOCTYPE html>
 
 
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
   <head>
   <head>
-    <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-    <title>Index &#8212; gRPC Python 1.26.0 documentation</title>
+    <meta charset="utf-8" />
+    <title>Index &#8212; gRPC Python 1.28.1 documentation</title>
     <link rel="stylesheet" href="_static/alabaster.css" type="text/css" />
     <link rel="stylesheet" href="_static/alabaster.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
-    <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
-    <script type="text/javascript" src="_static/jquery.js"></script>
-    <script type="text/javascript" src="_static/underscore.js"></script>
-    <script type="text/javascript" src="_static/doctools.js"></script>
-    <script type="text/javascript" src="_static/language_data.js"></script>
+    <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="#" />
     <link rel="index" title="Index" href="#" />
     <link rel="search" title="Search" href="search.html" />
     <link rel="search" title="Search" href="search.html" />
    
    
@@ -32,7 +30,7 @@
 
 
 
 
 
 
-<p class="blurb">1.26.0</p>
+<p class="blurb">1.28.1</p>
 
 
 
 
 
 
@@ -43,6 +41,7 @@
 <p class="caption"><span class="caption-text">Contents:</span></p>
 <p class="caption"><span class="caption-text">Contents:</span></p>
 <ul>
 <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.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_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_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_reflection.html">gRPC Reflection</a></li>
@@ -59,17 +58,15 @@
 </ul>
 </ul>
 </div>
 </div>
 <div id="searchbox" style="display: none" role="search">
 <div id="searchbox" style="display: none" role="search">
-  <h3>Quick search</h3>
+  <h3 id="searchlabel">Quick search</h3>
     <div class="searchformwrapper">
     <div class="searchformwrapper">
     <form class="search" action="search.html" method="get">
     <form class="search" action="search.html" method="get">
-      <input type="text" name="q" />
+      <input type="text" name="q" aria-labelledby="searchlabel" />
       <input type="submit" value="Go" />
       <input type="submit" value="Go" />
-      <input type="hidden" name="check_keywords" value="yes" />
-      <input type="hidden" name="area" value="default" />
     </form>
     </form>
     </div>
     </div>
 </div>
 </div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
+<script>$('#searchbox').show(0);</script>
 
 
 
 
 
 
@@ -92,6 +89,7 @@
 <div class="genindex-jumpbox">
 <div class="genindex-jumpbox">
  <a href="#_"><strong>_</strong></a>
  <a href="#_"><strong>_</strong></a>
  | <a href="#A"><strong>A</strong></a>
  | <a href="#A"><strong>A</strong></a>
+ | <a href="#B"><strong>B</strong></a>
  | <a href="#C"><strong>C</strong></a>
  | <a href="#C"><strong>C</strong></a>
  | <a href="#D"><strong>D</strong></a>
  | <a href="#D"><strong>D</strong></a>
  | <a href="#E"><strong>E</strong></a>
  | <a href="#E"><strong>E</strong></a>
@@ -114,10 +112,34 @@
 <h2 id="_">_</h2>
 <h2 id="_">_</h2>
 <table style="width: 100%" class="indextable genindextable"><tr>
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%; vertical-align: top;"><ul>
   <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="grpc_asyncio.html#grpc.experimental.aio.Channel.__aenter__">__aenter__() (grpc.experimental.aio.Channel method)</a>
+</li>
+      <li><a href="grpc_asyncio.html#grpc.experimental.aio.Channel.__aexit__">__aexit__() (grpc.experimental.aio.Channel method)</a>
+</li>
+      <li><a href="grpc_asyncio.html#grpc.experimental.aio.StreamStreamCall.__aiter__">__aiter__() (grpc.experimental.aio.StreamStreamCall method)</a>
+
+      <ul>
+        <li><a href="grpc_asyncio.html#grpc.experimental.aio.UnaryStreamCall.__aiter__">(grpc.experimental.aio.UnaryStreamCall method)</a>
+</li>
+      </ul></li>
+      <li><a href="grpc_asyncio.html#grpc.experimental.aio.StreamUnaryCall.__await__">__await__() (grpc.experimental.aio.StreamUnaryCall method)</a>
+
+      <ul>
+        <li><a href="grpc_asyncio.html#grpc.experimental.aio.UnaryUnaryCall.__await__">(grpc.experimental.aio.UnaryUnaryCall method)</a>
+</li>
+      </ul></li>
       <li><a href="grpc.html#grpc.AuthMetadataPlugin.__call__">__call__() (grpc.AuthMetadataPlugin method)</a>
       <li><a href="grpc.html#grpc.AuthMetadataPlugin.__call__">__call__() (grpc.AuthMetadataPlugin method)</a>
 
 
       <ul>
       <ul>
         <li><a href="grpc.html#grpc.AuthMetadataPluginCallback.__call__">(grpc.AuthMetadataPluginCallback method)</a>
         <li><a href="grpc.html#grpc.AuthMetadataPluginCallback.__call__">(grpc.AuthMetadataPluginCallback method)</a>
+</li>
+        <li><a href="grpc_asyncio.html#grpc.experimental.aio.StreamStreamMultiCallable.__call__">(grpc.experimental.aio.StreamStreamMultiCallable method)</a>
+</li>
+        <li><a href="grpc_asyncio.html#grpc.experimental.aio.StreamUnaryMultiCallable.__call__">(grpc.experimental.aio.StreamUnaryMultiCallable method)</a>
+</li>
+        <li><a href="grpc_asyncio.html#grpc.experimental.aio.UnaryStreamMultiCallable.__call__">(grpc.experimental.aio.UnaryStreamMultiCallable method)</a>
+</li>
+        <li><a href="grpc_asyncio.html#grpc.experimental.aio.UnaryUnaryMultiCallable.__call__">(grpc.experimental.aio.UnaryUnaryMultiCallable method)</a>
 </li>
 </li>
         <li><a href="grpc.html#grpc.StreamStreamMultiCallable.__call__">(grpc.StreamStreamMultiCallable method)</a>
         <li><a href="grpc.html#grpc.StreamStreamMultiCallable.__call__">(grpc.StreamStreamMultiCallable method)</a>
 </li>
 </li>
@@ -134,11 +156,17 @@
 <h2 id="A">A</h2>
 <h2 id="A">A</h2>
 <table style="width: 100%" class="indextable genindextable"><tr>
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%; vertical-align: top;"><ul>
   <td style="width: 33%; vertical-align: top;"><ul>
-      <li><a href="grpc.html#grpc.ServicerContext.abort">abort() (grpc.ServicerContext method)</a>
+      <li><a href="grpc_asyncio.html#grpc.experimental.aio.ServicerContext.abort">abort() (grpc.experimental.aio.ServicerContext method)</a>
+
+      <ul>
+        <li><a href="grpc.html#grpc.ServicerContext.abort">(grpc.ServicerContext method)</a>
 </li>
 </li>
+      </ul></li>
       <li><a href="grpc.html#grpc.ServicerContext.abort_with_status">abort_with_status() (grpc.ServicerContext method)</a>
       <li><a href="grpc.html#grpc.ServicerContext.abort_with_status">abort_with_status() (grpc.ServicerContext method)</a>
 </li>
 </li>
       <li><a href="grpc.html#grpc.StatusCode.ABORTED">ABORTED (grpc.StatusCode attribute)</a>
       <li><a href="grpc.html#grpc.StatusCode.ABORTED">ABORTED (grpc.StatusCode attribute)</a>
+</li>
+      <li><a href="grpc_asyncio.html#grpc.experimental.aio.AbortError">AbortError</a>
 </li>
 </li>
       <li><a href="grpc.html#grpc.access_token_call_credentials">access_token_call_credentials() (in module grpc)</a>
       <li><a href="grpc.html#grpc.access_token_call_credentials">access_token_call_credentials() (in module grpc)</a>
 </li>
 </li>
@@ -146,15 +174,35 @@
 </li>
 </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><a href="grpc_channelz.html#grpc_channelz.v1.channelz.add_channelz_servicer">add_channelz_servicer() (in module grpc_channelz.v1.channelz)</a>
 </li>
 </li>
-      <li><a href="grpc.html#grpc.Future.add_done_callback">add_done_callback() (grpc.Future method)</a>
+      <li><a href="grpc_asyncio.html#grpc.experimental.aio.InterceptedUnaryUnaryCall.add_done_callback">add_done_callback() (grpc.experimental.aio.InterceptedUnaryUnaryCall method)</a>
+
+      <ul>
+        <li><a href="grpc_asyncio.html#grpc.experimental.aio.RpcContext.add_done_callback">(grpc.experimental.aio.RpcContext method)</a>
 </li>
 </li>
+        <li><a href="grpc.html#grpc.Future.add_done_callback">(grpc.Future method)</a>
+</li>
+      </ul></li>
   </ul></td>
   </ul></td>
   <td style="width: 33%; vertical-align: top;"><ul>
   <td style="width: 33%; vertical-align: top;"><ul>
-      <li><a href="grpc.html#grpc.Server.add_generic_rpc_handlers">add_generic_rpc_handlers() (grpc.Server method)</a>
+      <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>
+      <li><a href="grpc_asyncio.html#grpc.experimental.aio.Server.add_insecure_port">add_insecure_port() (grpc.experimental.aio.Server method)</a>
+
+      <ul>
+        <li><a href="grpc.html#grpc.Server.add_insecure_port">(grpc.Server method)</a>
 </li>
 </li>
-      <li><a href="grpc.html#grpc.Server.add_insecure_port">add_insecure_port() (grpc.Server method)</a>
+      </ul></li>
+      <li><a href="grpc_asyncio.html#grpc.experimental.aio.Server.add_secure_port">add_secure_port() (grpc.experimental.aio.Server method)</a>
+
+      <ul>
+        <li><a href="grpc.html#grpc.Server.add_secure_port">(grpc.Server method)</a>
 </li>
 </li>
-      <li><a href="grpc.html#grpc.Server.add_secure_port">add_secure_port() (grpc.Server method)</a>
+      </ul></li>
+      <li><a href="grpc_asyncio.html#grpc.experimental.aio.AioRpcError">AioRpcError</a>
 </li>
 </li>
       <li><a href="grpc.html#grpc.StatusCode.ALREADY_EXISTS">ALREADY_EXISTS (grpc.StatusCode attribute)</a>
       <li><a href="grpc.html#grpc.StatusCode.ALREADY_EXISTS">ALREADY_EXISTS (grpc.StatusCode attribute)</a>
 </li>
 </li>
@@ -169,20 +217,36 @@
   </ul></td>
   </ul></td>
 </tr></table>
 </tr></table>
 
 
+<h2 id="B">B</h2>
+<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.BaseError">BaseError</a>
+</li>
+  </ul></td>
+</tr></table>
+
 <h2 id="C">C</h2>
 <h2 id="C">C</h2>
 <table style="width: 100%" class="indextable genindextable"><tr>
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%; vertical-align: top;"><ul>
   <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="grpc.html#grpc.Call">Call (class in grpc)</a>
       <li><a href="grpc.html#grpc.Call">Call (class in grpc)</a>
+
+      <ul>
+        <li><a href="grpc_asyncio.html#grpc.experimental.aio.Call">(class in grpc.experimental.aio)</a>
 </li>
 </li>
+      </ul></li>
       <li><a href="grpc_testing.html#grpc_testing.Time.call_at">call_at() (grpc_testing.Time method)</a>
       <li><a href="grpc_testing.html#grpc_testing.Time.call_at">call_at() (grpc_testing.Time method)</a>
 </li>
 </li>
       <li><a href="grpc_testing.html#grpc_testing.Time.call_in">call_in() (grpc_testing.Time method)</a>
       <li><a href="grpc_testing.html#grpc_testing.Time.call_in">call_in() (grpc_testing.Time method)</a>
 </li>
 </li>
       <li><a href="grpc.html#grpc.CallCredentials">CallCredentials (class in grpc)</a>
       <li><a href="grpc.html#grpc.CallCredentials">CallCredentials (class in grpc)</a>
 </li>
 </li>
-      <li><a href="grpc.html#grpc.Future.cancel">cancel() (grpc.Future method)</a>
+      <li><a href="grpc_asyncio.html#grpc.experimental.aio.InterceptedUnaryUnaryCall.cancel">cancel() (grpc.experimental.aio.InterceptedUnaryUnaryCall method)</a>
 
 
       <ul>
       <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>
         <li><a href="grpc.html#grpc.RpcContext.cancel">(grpc.RpcContext method)</a>
 </li>
 </li>
         <li><a href="grpc_testing.html#grpc_testing.StreamStreamServerRpc.cancel">(grpc_testing.StreamStreamServerRpc method)</a>
         <li><a href="grpc_testing.html#grpc_testing.StreamStreamServerRpc.cancel">(grpc_testing.StreamStreamServerRpc method)</a>
@@ -196,9 +260,13 @@
       </ul></li>
       </ul></li>
       <li><a href="grpc.html#grpc.StatusCode.CANCELLED">CANCELLED (grpc.StatusCode attribute)</a>
       <li><a href="grpc.html#grpc.StatusCode.CANCELLED">CANCELLED (grpc.StatusCode attribute)</a>
 </li>
 </li>
-      <li><a href="grpc.html#grpc.Future.cancelled">cancelled() (grpc.Future method)</a>
+      <li><a href="grpc_asyncio.html#grpc.experimental.aio.InterceptedUnaryUnaryCall.cancelled">cancelled() (grpc.experimental.aio.InterceptedUnaryUnaryCall method)</a>
 
 
       <ul>
       <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>
         <li><a href="grpc_testing.html#grpc_testing.StreamStreamChannelRpc.cancelled">(grpc_testing.StreamStreamChannelRpc method)</a>
 </li>
 </li>
         <li><a href="grpc_testing.html#grpc_testing.StreamUnaryChannelRpc.cancelled">(grpc_testing.StreamUnaryChannelRpc method)</a>
         <li><a href="grpc_testing.html#grpc_testing.StreamUnaryChannelRpc.cancelled">(grpc_testing.StreamUnaryChannelRpc method)</a>
@@ -208,15 +276,19 @@
         <li><a href="grpc_testing.html#grpc_testing.UnaryUnaryChannelRpc.cancelled">(grpc_testing.UnaryUnaryChannelRpc method)</a>
         <li><a href="grpc_testing.html#grpc_testing.UnaryUnaryChannelRpc.cancelled">(grpc_testing.UnaryUnaryChannelRpc method)</a>
 </li>
 </li>
       </ul></li>
       </ul></li>
-  </ul></td>
-  <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="grpc.html#grpc.Channel">Channel (class in grpc)</a>
       <li><a href="grpc.html#grpc.Channel">Channel (class in grpc)</a>
 
 
       <ul>
       <ul>
+        <li><a href="grpc_asyncio.html#grpc.experimental.aio.Channel">(class in grpc.experimental.aio)</a>
+</li>
         <li><a href="grpc_testing.html#grpc_testing.Channel">(class in grpc_testing)</a>
         <li><a href="grpc_testing.html#grpc_testing.Channel">(class in grpc_testing)</a>
 </li>
 </li>
       </ul></li>
       </ul></li>
+  </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><a href="grpc_testing.html#grpc_testing.channel">channel() (in module grpc_testing)</a>
+</li>
+      <li><a href="grpc_asyncio.html#grpc.experimental.aio.Channel.channel_ready">channel_ready() (grpc.experimental.aio.Channel method)</a>
 </li>
 </li>
       <li><a href="grpc.html#grpc.channel_ready_future">channel_ready_future() (in module grpc)</a>
       <li><a href="grpc.html#grpc.channel_ready_future">channel_ready_future() (in module grpc)</a>
 </li>
 </li>
@@ -225,13 +297,31 @@
       <li><a href="grpc.html#grpc.ChannelCredentials">ChannelCredentials (class in grpc)</a>
       <li><a href="grpc.html#grpc.ChannelCredentials">ChannelCredentials (class in grpc)</a>
 </li>
 </li>
       <li><a href="grpc_channelz.html#grpc_channelz.v1.channelz.ChannelzServicer">ChannelzServicer (class in grpc_channelz.v1.channelz)</a>
       <li><a href="grpc_channelz.html#grpc_channelz.v1.channelz.ChannelzServicer">ChannelzServicer (class in grpc_channelz.v1.channelz)</a>
+</li>
+      <li><a href="grpc_health_checking.html#grpc_health.v1.health.HealthServicer.Check">Check() (grpc_health.v1.health.HealthServicer method)</a>
 </li>
 </li>
       <li><a href="grpc.html#grpc.ClientCallDetails">ClientCallDetails (class in grpc)</a>
       <li><a href="grpc.html#grpc.ClientCallDetails">ClientCallDetails (class in grpc)</a>
+
+      <ul>
+        <li><a href="grpc_asyncio.html#grpc.experimental.aio.ClientCallDetails">(class in grpc.experimental.aio)</a>
 </li>
 </li>
+      </ul></li>
       <li><a href="grpc.html#grpc.Channel.close">close() (grpc.Channel method)</a>
       <li><a href="grpc.html#grpc.Channel.close">close() (grpc.Channel method)</a>
+
+      <ul>
+        <li><a href="grpc_asyncio.html#grpc.experimental.aio.Channel.close">(grpc.experimental.aio.Channel method)</a>
 </li>
 </li>
+      </ul></li>
       <li><a href="grpc.html#grpc.Call.code">code() (grpc.Call method)</a>
       <li><a href="grpc.html#grpc.Call.code">code() (grpc.Call method)</a>
+
+      <ul>
+        <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>
 </li>
+      </ul></li>
       <li><a href="grpc.html#grpc.composite_call_credentials">composite_call_credentials() (in module grpc)</a>
       <li><a href="grpc.html#grpc.composite_call_credentials">composite_call_credentials() (in module grpc)</a>
 </li>
 </li>
       <li><a href="grpc.html#grpc.composite_channel_credentials">composite_channel_credentials() (in module grpc)</a>
       <li><a href="grpc.html#grpc.composite_channel_credentials">composite_channel_credentials() (in module grpc)</a>
@@ -253,17 +343,43 @@
       <li><a href="grpc.html#grpc.StatusCode.DATA_LOSS">DATA_LOSS (grpc.StatusCode attribute)</a>
       <li><a href="grpc.html#grpc.StatusCode.DATA_LOSS">DATA_LOSS (grpc.StatusCode attribute)</a>
 </li>
 </li>
       <li><a href="grpc.html#grpc.StatusCode.DEADLINE_EXCEEDED">DEADLINE_EXCEEDED (grpc.StatusCode attribute)</a>
       <li><a href="grpc.html#grpc.StatusCode.DEADLINE_EXCEEDED">DEADLINE_EXCEEDED (grpc.StatusCode attribute)</a>
+</li>
+      <li><a href="grpc_asyncio.html#grpc.experimental.aio.AioRpcError.debug_error_string">debug_error_string() (grpc.experimental.aio.AioRpcError method)</a>
 </li>
 </li>
       <li><a href="grpc.html#grpc.Compression.Deflate">Deflate (grpc.Compression attribute)</a>
       <li><a href="grpc.html#grpc.Compression.Deflate">Deflate (grpc.Compression attribute)</a>
 </li>
 </li>
+      <li><a href="grpc.html#grpc.Call.details">details() (grpc.Call method)</a>
+
+      <ul>
+        <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>
   </ul></td>
   <td style="width: 33%; vertical-align: top;"><ul>
   <td style="width: 33%; vertical-align: top;"><ul>
-      <li><a href="grpc.html#grpc.Call.details">details() (grpc.Call method)</a>
+      <li><a href="grpc_asyncio.html#grpc.experimental.aio.ServicerContext.disable_next_message_compression">disable_next_message_compression() (grpc.experimental.aio.ServicerContext method)</a>
+
+      <ul>
+        <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>
+
+      <ul>
+        <li><a href="grpc_asyncio.html#grpc.experimental.aio.RpcContext.done">(grpc.experimental.aio.RpcContext method)</a>
 </li>
 </li>
-      <li><a href="grpc.html#grpc.ServicerContext.disable_next_message_compression">disable_next_message_compression() (grpc.ServicerContext method)</a>
+        <li><a href="grpc.html#grpc.Future.done">(grpc.Future method)</a>
 </li>
 </li>
-      <li><a href="grpc.html#grpc.Future.done">done() (grpc.Future method)</a>
+      </ul></li>
+      <li><a href="grpc_asyncio.html#grpc.experimental.aio.StreamStreamCall.done_writing">done_writing() (grpc.experimental.aio.StreamStreamCall method)</a>
+
+      <ul>
+        <li><a href="grpc_asyncio.html#grpc.experimental.aio.StreamUnaryCall.done_writing">(grpc.experimental.aio.StreamUnaryCall method)</a>
 </li>
 </li>
+      </ul></li>
       <li><a href="grpc.html#grpc.dynamic_ssl_server_credentials">dynamic_ssl_server_credentials() (in module grpc)</a>
       <li><a href="grpc.html#grpc.dynamic_ssl_server_credentials">dynamic_ssl_server_credentials() (in module grpc)</a>
 </li>
 </li>
   </ul></td>
   </ul></td>
@@ -312,12 +428,30 @@
   <td style="width: 33%; vertical-align: top;"><ul>
   <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="grpc.html#grpc.GenericRpcHandler">GenericRpcHandler (class in grpc)</a>
       <li><a href="grpc.html#grpc.GenericRpcHandler">GenericRpcHandler (class in grpc)</a>
 </li>
 </li>
-      <li><a href="grpc.html#module-grpc">grpc (module)</a>
+      <li><a href="grpc_asyncio.html#grpc.experimental.aio.Channel.get_state">get_state() (grpc.experimental.aio.Channel method)</a>
 </li>
 </li>
-      <li><a href="grpc_channelz.html#module-grpc_channelz.v1.channelz">grpc_channelz.v1.channelz (module)</a>
+      <li><a href="grpc_channelz.html#grpc_channelz.v1.channelz.ChannelzServicer.GetChannel">GetChannel() (grpc_channelz.v1.channelz.ChannelzServicer static method)</a>
+</li>
+      <li><a href="grpc_channelz.html#grpc_channelz.v1.channelz.ChannelzServicer.GetServer">GetServer() (grpc_channelz.v1.channelz.ChannelzServicer static method)</a>
+</li>
+      <li><a href="grpc_channelz.html#grpc_channelz.v1.channelz.ChannelzServicer.GetServers">GetServers() (grpc_channelz.v1.channelz.ChannelzServicer static method)</a>
+</li>
+      <li><a href="grpc_channelz.html#grpc_channelz.v1.channelz.ChannelzServicer.GetServerSockets">GetServerSockets() (grpc_channelz.v1.channelz.ChannelzServicer static method)</a>
+</li>
+      <li><a href="grpc_channelz.html#grpc_channelz.v1.channelz.ChannelzServicer.GetSocket">GetSocket() (grpc_channelz.v1.channelz.ChannelzServicer static method)</a>
+</li>
+      <li><a href="grpc_channelz.html#grpc_channelz.v1.channelz.ChannelzServicer.GetSubchannel">GetSubchannel() (grpc_channelz.v1.channelz.ChannelzServicer static method)</a>
 </li>
 </li>
   </ul></td>
   </ul></td>
   <td style="width: 33%; vertical-align: top;"><ul>
   <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="grpc_channelz.html#grpc_channelz.v1.channelz.ChannelzServicer.GetTopChannels">GetTopChannels() (grpc_channelz.v1.channelz.ChannelzServicer static method)</a>
+</li>
+      <li><a href="grpc.html#module-grpc">grpc (module)</a>
+</li>
+      <li><a href="grpc_asyncio.html#module-grpc.experimental.aio">grpc.experimental.aio (module)</a>
+</li>
+      <li><a href="grpc_channelz.html#module-grpc_channelz.v1.channelz">grpc_channelz.v1.channelz (module)</a>
+</li>
       <li><a href="grpc_reflection.html#module-grpc_reflection.v1alpha.reflection">grpc_reflection.v1alpha.reflection (module)</a>
       <li><a href="grpc_reflection.html#module-grpc_reflection.v1alpha.reflection">grpc_reflection.v1alpha.reflection (module)</a>
 </li>
 </li>
       <li><a href="grpc_status.html#module-grpc_status.rpc_status">grpc_status.rpc_status (module)</a>
       <li><a href="grpc_status.html#module-grpc_status.rpc_status">grpc_status.rpc_status (module)</a>
@@ -345,10 +479,18 @@
 <table style="width: 100%" class="indextable genindextable"><tr>
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%; vertical-align: top;"><ul>
   <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="grpc.html#grpc.ChannelConnectivity.IDLE">IDLE (grpc.ChannelConnectivity attribute)</a>
       <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>
       <li><a href="grpc.html#grpc.Call.initial_metadata">initial_metadata() (grpc.Call method)</a>
       <li><a href="grpc.html#grpc.Call.initial_metadata">initial_metadata() (grpc.Call method)</a>
 
 
       <ul>
       <ul>
+        <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><a href="grpc_testing.html#grpc_testing.StreamStreamServerRpc.initial_metadata">(grpc_testing.StreamStreamServerRpc method)</a>
 </li>
 </li>
         <li><a href="grpc_testing.html#grpc_testing.StreamUnaryServerRpc.initial_metadata">(grpc_testing.StreamUnaryServerRpc method)</a>
         <li><a href="grpc_testing.html#grpc_testing.StreamUnaryServerRpc.initial_metadata">(grpc_testing.StreamUnaryServerRpc method)</a>
@@ -359,29 +501,45 @@
 </li>
 </li>
       </ul></li>
       </ul></li>
       <li><a href="grpc.html#grpc.insecure_channel">insecure_channel() (in module grpc)</a>
       <li><a href="grpc.html#grpc.insecure_channel">insecure_channel() (in module grpc)</a>
+
+      <ul>
+        <li><a href="grpc_asyncio.html#grpc.experimental.aio.insecure_channel">(in module grpc.experimental.aio)</a>
 </li>
 </li>
+      </ul></li>
       <li><a href="grpc.html#grpc.intercept_channel">intercept_channel() (in module grpc)</a>
       <li><a href="grpc.html#grpc.intercept_channel">intercept_channel() (in module grpc)</a>
 </li>
 </li>
       <li><a href="grpc.html#grpc.ServerInterceptor.intercept_service">intercept_service() (grpc.ServerInterceptor method)</a>
       <li><a href="grpc.html#grpc.ServerInterceptor.intercept_service">intercept_service() (grpc.ServerInterceptor method)</a>
 </li>
 </li>
       <li><a href="grpc.html#grpc.StreamStreamClientInterceptor.intercept_stream_stream">intercept_stream_stream() (grpc.StreamStreamClientInterceptor method)</a>
       <li><a href="grpc.html#grpc.StreamStreamClientInterceptor.intercept_stream_stream">intercept_stream_stream() (grpc.StreamStreamClientInterceptor method)</a>
-</li>
-      <li><a href="grpc.html#grpc.StreamUnaryClientInterceptor.intercept_stream_unary">intercept_stream_unary() (grpc.StreamUnaryClientInterceptor method)</a>
 </li>
 </li>
   </ul></td>
   </ul></td>
   <td style="width: 33%; vertical-align: top;"><ul>
   <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>
       <li><a href="grpc.html#grpc.UnaryStreamClientInterceptor.intercept_unary_stream">intercept_unary_stream() (grpc.UnaryStreamClientInterceptor method)</a>
       <li><a href="grpc.html#grpc.UnaryStreamClientInterceptor.intercept_unary_stream">intercept_unary_stream() (grpc.UnaryStreamClientInterceptor method)</a>
 </li>
 </li>
-      <li><a href="grpc.html#grpc.UnaryUnaryClientInterceptor.intercept_unary_unary">intercept_unary_unary() (grpc.UnaryUnaryClientInterceptor method)</a>
+      <li><a href="grpc_asyncio.html#grpc.experimental.aio.UnaryUnaryClientInterceptor.intercept_unary_unary">intercept_unary_unary() (grpc.experimental.aio.UnaryUnaryClientInterceptor method)</a>
+
+      <ul>
+        <li><a href="grpc.html#grpc.UnaryUnaryClientInterceptor.intercept_unary_unary">(grpc.UnaryUnaryClientInterceptor method)</a>
+</li>
+      </ul></li>
+      <li><a href="grpc_asyncio.html#grpc.experimental.aio.InterceptedUnaryUnaryCall">InterceptedUnaryUnaryCall (class in grpc.experimental.aio)</a>
 </li>
 </li>
       <li><a href="grpc.html#grpc.StatusCode.INTERNAL">INTERNAL (grpc.StatusCode attribute)</a>
       <li><a href="grpc.html#grpc.StatusCode.INTERNAL">INTERNAL (grpc.StatusCode attribute)</a>
+</li>
+      <li><a href="grpc_asyncio.html#grpc.experimental.aio.InternalError">InternalError</a>
 </li>
 </li>
       <li><a href="grpc.html#grpc.StatusCode.INVALID_ARGUMENT">INVALID_ARGUMENT (grpc.StatusCode attribute)</a>
       <li><a href="grpc.html#grpc.StatusCode.INVALID_ARGUMENT">INVALID_ARGUMENT (grpc.StatusCode attribute)</a>
 </li>
 </li>
       <li><a href="grpc.html#grpc.HandlerCallDetails.invocation_metadata">invocation_metadata (grpc.HandlerCallDetails attribute)</a>
       <li><a href="grpc.html#grpc.HandlerCallDetails.invocation_metadata">invocation_metadata (grpc.HandlerCallDetails attribute)</a>
 </li>
 </li>
-      <li><a href="grpc.html#grpc.ServicerContext.invocation_metadata">invocation_metadata() (grpc.ServicerContext method)</a>
+      <li><a href="grpc_asyncio.html#grpc.experimental.aio.ServicerContext.invocation_metadata">invocation_metadata() (grpc.experimental.aio.ServicerContext method)</a>
+
+      <ul>
+        <li><a href="grpc.html#grpc.ServicerContext.invocation_metadata">(grpc.ServicerContext method)</a>
 </li>
 </li>
+      </ul></li>
       <li><a href="grpc_testing.html#grpc_testing.Server.invoke_stream_stream">invoke_stream_stream() (grpc_testing.Server method)</a>
       <li><a href="grpc_testing.html#grpc_testing.Server.invoke_stream_stream">invoke_stream_stream() (grpc_testing.Server method)</a>
 </li>
 </li>
       <li><a href="grpc_testing.html#grpc_testing.Server.invoke_stream_unary">invoke_stream_unary() (grpc_testing.Server method)</a>
       <li><a href="grpc_testing.html#grpc_testing.Server.invoke_stream_unary">invoke_stream_unary() (grpc_testing.Server method)</a>
@@ -478,6 +636,14 @@
 <h2 id="R">R</h2>
 <h2 id="R">R</h2>
 <table style="width: 100%" class="indextable genindextable"><tr>
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%; vertical-align: top;"><ul>
   <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="grpc_asyncio.html#grpc.experimental.aio.ServicerContext.read">read() (grpc.experimental.aio.ServicerContext method)</a>
+
+      <ul>
+        <li><a href="grpc_asyncio.html#grpc.experimental.aio.StreamStreamCall.read">(grpc.experimental.aio.StreamStreamCall method)</a>
+</li>
+        <li><a href="grpc_asyncio.html#grpc.experimental.aio.UnaryStreamCall.read">(grpc.experimental.aio.UnaryStreamCall method)</a>
+</li>
+      </ul></li>
       <li><a href="grpc.html#grpc.ChannelConnectivity.READY">READY (grpc.ChannelConnectivity attribute)</a>
       <li><a href="grpc.html#grpc.ChannelConnectivity.READY">READY (grpc.ChannelConnectivity attribute)</a>
 </li>
 </li>
       <li><a href="grpc_reflection.html#grpc_reflection.v1alpha.reflection.ReflectionServicer">ReflectionServicer (class in grpc_reflection.v1alpha.reflection)</a>
       <li><a href="grpc_reflection.html#grpc_reflection.v1alpha.reflection.ReflectionServicer">ReflectionServicer (class in grpc_reflection.v1alpha.reflection)</a>
@@ -507,7 +673,11 @@
       <li><a href="grpc.html#grpc.Future.result">result() (grpc.Future method)</a>
       <li><a href="grpc.html#grpc.Future.result">result() (grpc.Future method)</a>
 </li>
 </li>
       <li><a href="grpc.html#grpc.RpcContext">RpcContext (class in grpc)</a>
       <li><a href="grpc.html#grpc.RpcContext">RpcContext (class in grpc)</a>
+
+      <ul>
+        <li><a href="grpc_asyncio.html#grpc.experimental.aio.RpcContext">(class in grpc.experimental.aio)</a>
 </li>
 </li>
+      </ul></li>
       <li><a href="grpc.html#grpc.RpcError">RpcError</a>
       <li><a href="grpc.html#grpc.RpcError">RpcError</a>
 </li>
 </li>
       <li><a href="grpc.html#grpc.RpcMethodHandler">RpcMethodHandler (class in grpc)</a>
       <li><a href="grpc.html#grpc.RpcMethodHandler">RpcMethodHandler (class in grpc)</a>
@@ -521,10 +691,16 @@
 <table style="width: 100%" class="indextable genindextable"><tr>
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%; vertical-align: top;"><ul>
   <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="grpc.html#grpc.secure_channel">secure_channel() (in module grpc)</a>
       <li><a href="grpc.html#grpc.secure_channel">secure_channel() (in module grpc)</a>
+
+      <ul>
+        <li><a href="grpc_asyncio.html#grpc.experimental.aio.secure_channel">(in module grpc.experimental.aio)</a>
 </li>
 </li>
-      <li><a href="grpc.html#grpc.ServicerContext.send_initial_metadata">send_initial_metadata() (grpc.ServicerContext method)</a>
+      </ul></li>
+      <li><a href="grpc_asyncio.html#grpc.experimental.aio.ServicerContext.send_initial_metadata">send_initial_metadata() (grpc.experimental.aio.ServicerContext method)</a>
 
 
       <ul>
       <ul>
+        <li><a href="grpc.html#grpc.ServicerContext.send_initial_metadata">(grpc.ServicerContext method)</a>
+</li>
         <li><a href="grpc_testing.html#grpc_testing.StreamStreamChannelRpc.send_initial_metadata">(grpc_testing.StreamStreamChannelRpc method)</a>
         <li><a href="grpc_testing.html#grpc_testing.StreamStreamChannelRpc.send_initial_metadata">(grpc_testing.StreamStreamChannelRpc method)</a>
 </li>
 </li>
         <li><a href="grpc_testing.html#grpc_testing.StreamUnaryChannelRpc.send_initial_metadata">(grpc_testing.StreamUnaryChannelRpc method)</a>
         <li><a href="grpc_testing.html#grpc_testing.StreamUnaryChannelRpc.send_initial_metadata">(grpc_testing.StreamUnaryChannelRpc method)</a>
@@ -549,11 +725,17 @@
       <li><a href="grpc.html#grpc.Server">Server (class in grpc)</a>
       <li><a href="grpc.html#grpc.Server">Server (class in grpc)</a>
 
 
       <ul>
       <ul>
+        <li><a href="grpc_asyncio.html#grpc.experimental.aio.Server">(class in grpc.experimental.aio)</a>
+</li>
         <li><a href="grpc_testing.html#grpc_testing.Server">(class in grpc_testing)</a>
         <li><a href="grpc_testing.html#grpc_testing.Server">(class in grpc_testing)</a>
 </li>
 </li>
       </ul></li>
       </ul></li>
       <li><a href="grpc.html#grpc.server">server() (in module grpc)</a>
       <li><a href="grpc.html#grpc.server">server() (in module grpc)</a>
+
+      <ul>
+        <li><a href="grpc_asyncio.html#grpc.experimental.aio.server">(in module grpc.experimental.aio)</a>
 </li>
 </li>
+      </ul></li>
       <li><a href="grpc_testing.html#grpc_testing.server_from_dictionary">server_from_dictionary() (in module grpc_testing)</a>
       <li><a href="grpc_testing.html#grpc_testing.server_from_dictionary">server_from_dictionary() (in module grpc_testing)</a>
 </li>
 </li>
       <li><a href="grpc.html#grpc.ServerCertificateConfiguration">ServerCertificateConfiguration (class in grpc)</a>
       <li><a href="grpc.html#grpc.ServerCertificateConfiguration">ServerCertificateConfiguration (class in grpc)</a>
@@ -561,6 +743,8 @@
       <li><a href="grpc.html#grpc.ServerCredentials">ServerCredentials (class in grpc)</a>
       <li><a href="grpc.html#grpc.ServerCredentials">ServerCredentials (class in grpc)</a>
 </li>
 </li>
       <li><a href="grpc.html#grpc.ServerInterceptor">ServerInterceptor (class in grpc)</a>
       <li><a href="grpc.html#grpc.ServerInterceptor">ServerInterceptor (class in grpc)</a>
+</li>
+      <li><a href="grpc_reflection.html#grpc_reflection.v1alpha.reflection.ReflectionServicer.ServerReflectionInfo">ServerReflectionInfo() (grpc_reflection.v1alpha.reflection.ReflectionServicer method)</a>
 </li>
 </li>
       <li><a href="grpc.html#grpc.GenericRpcHandler.service">service() (grpc.GenericRpcHandler method)</a>
       <li><a href="grpc.html#grpc.GenericRpcHandler.service">service() (grpc.GenericRpcHandler method)</a>
 </li>
 </li>
@@ -569,21 +753,41 @@
       <li><a href="grpc.html#grpc.AuthMetadataContext.service_url">service_url (grpc.AuthMetadataContext attribute)</a>
       <li><a href="grpc.html#grpc.AuthMetadataContext.service_url">service_url (grpc.AuthMetadataContext attribute)</a>
 </li>
 </li>
       <li><a href="grpc.html#grpc.ServicerContext">ServicerContext (class in grpc)</a>
       <li><a href="grpc.html#grpc.ServicerContext">ServicerContext (class in grpc)</a>
+
+      <ul>
+        <li><a href="grpc_asyncio.html#grpc.experimental.aio.ServicerContext">(class in grpc.experimental.aio)</a>
 </li>
 </li>
+      </ul></li>
       <li><a href="grpc.html#grpc.ServiceRpcHandler">ServiceRpcHandler (class in grpc)</a>
       <li><a href="grpc.html#grpc.ServiceRpcHandler">ServiceRpcHandler (class in grpc)</a>
 </li>
 </li>
       <li><a href="grpc_health_checking.html#grpc_health.v1.health.HealthServicer.set">set() (grpc_health.v1.health.HealthServicer method)</a>
       <li><a href="grpc_health_checking.html#grpc_health.v1.health.HealthServicer.set">set() (grpc_health.v1.health.HealthServicer method)</a>
 </li>
 </li>
-      <li><a href="grpc.html#grpc.ServicerContext.set_code">set_code() (grpc.ServicerContext method)</a>
+      <li><a href="grpc_asyncio.html#grpc.experimental.aio.ServicerContext.set_code">set_code() (grpc.experimental.aio.ServicerContext method)</a>
+
+      <ul>
+        <li><a href="grpc.html#grpc.ServicerContext.set_code">(grpc.ServicerContext method)</a>
 </li>
 </li>
-      <li><a href="grpc.html#grpc.ServicerContext.set_compression">set_compression() (grpc.ServicerContext method)</a>
+      </ul></li>
+      <li><a href="grpc_asyncio.html#grpc.experimental.aio.ServicerContext.set_compression">set_compression() (grpc.experimental.aio.ServicerContext method)</a>
+
+      <ul>
+        <li><a href="grpc.html#grpc.ServicerContext.set_compression">(grpc.ServicerContext method)</a>
 </li>
 </li>
-      <li><a href="grpc.html#grpc.ServicerContext.set_details">set_details() (grpc.ServicerContext method)</a>
+      </ul></li>
+      <li><a href="grpc_asyncio.html#grpc.experimental.aio.ServicerContext.set_details">set_details() (grpc.experimental.aio.ServicerContext method)</a>
+
+      <ul>
+        <li><a href="grpc.html#grpc.ServicerContext.set_details">(grpc.ServicerContext method)</a>
 </li>
 </li>
+      </ul></li>
   </ul></td>
   </ul></td>
   <td style="width: 33%; vertical-align: top;"><ul>
   <td style="width: 33%; vertical-align: top;"><ul>
-      <li><a href="grpc.html#grpc.ServicerContext.set_trailing_metadata">set_trailing_metadata() (grpc.ServicerContext method)</a>
+      <li><a href="grpc_asyncio.html#grpc.experimental.aio.ServicerContext.set_trailing_metadata">set_trailing_metadata() (grpc.experimental.aio.ServicerContext method)</a>
+
+      <ul>
+        <li><a href="grpc.html#grpc.ServicerContext.set_trailing_metadata">(grpc.ServicerContext method)</a>
 </li>
 </li>
+      </ul></li>
       <li><a href="grpc.html#grpc.ChannelConnectivity.SHUTDOWN">SHUTDOWN (grpc.ChannelConnectivity attribute)</a>
       <li><a href="grpc.html#grpc.ChannelConnectivity.SHUTDOWN">SHUTDOWN (grpc.ChannelConnectivity attribute)</a>
 </li>
 </li>
       <li><a href="grpc_testing.html#grpc_testing.Time.sleep_for">sleep_for() (grpc_testing.Time method)</a>
       <li><a href="grpc_testing.html#grpc_testing.Time.sleep_for">sleep_for() (grpc_testing.Time method)</a>
@@ -596,38 +800,66 @@
 </li>
 </li>
       <li><a href="grpc.html#grpc.ssl_server_credentials">ssl_server_credentials() (in module grpc)</a>
       <li><a href="grpc.html#grpc.ssl_server_credentials">ssl_server_credentials() (in module grpc)</a>
 </li>
 </li>
-      <li><a href="grpc.html#grpc.Server.start">start() (grpc.Server method)</a>
+      <li><a href="grpc_asyncio.html#grpc.experimental.aio.Server.start">start() (grpc.experimental.aio.Server method)</a>
+
+      <ul>
+        <li><a href="grpc.html#grpc.Server.start">(grpc.Server method)</a>
 </li>
 </li>
+      </ul></li>
       <li><a href="grpc.html#grpc.StatusCode">StatusCode (class in grpc)</a>
       <li><a href="grpc.html#grpc.StatusCode">StatusCode (class in grpc)</a>
 </li>
 </li>
-      <li><a href="grpc.html#grpc.Server.stop">stop() (grpc.Server method)</a>
+      <li><a href="grpc_asyncio.html#grpc.experimental.aio.Server.stop">stop() (grpc.experimental.aio.Server method)</a>
+
+      <ul>
+        <li><a href="grpc.html#grpc.Server.stop">(grpc.Server method)</a>
 </li>
 </li>
+      </ul></li>
       <li><a href="grpc.html#grpc.RpcMethodHandler.stream_stream">stream_stream (grpc.RpcMethodHandler attribute)</a>
       <li><a href="grpc.html#grpc.RpcMethodHandler.stream_stream">stream_stream (grpc.RpcMethodHandler attribute)</a>
 </li>
 </li>
       <li><a href="grpc.html#grpc.Channel.stream_stream">stream_stream() (grpc.Channel method)</a>
       <li><a href="grpc.html#grpc.Channel.stream_stream">stream_stream() (grpc.Channel method)</a>
+
+      <ul>
+        <li><a href="grpc_asyncio.html#grpc.experimental.aio.Channel.stream_stream">(grpc.experimental.aio.Channel method)</a>
 </li>
 </li>
+      </ul></li>
       <li><a href="grpc.html#grpc.stream_stream_rpc_method_handler">stream_stream_rpc_method_handler() (in module grpc)</a>
       <li><a href="grpc.html#grpc.stream_stream_rpc_method_handler">stream_stream_rpc_method_handler() (in module grpc)</a>
 </li>
 </li>
       <li><a href="grpc.html#grpc.RpcMethodHandler.stream_unary">stream_unary (grpc.RpcMethodHandler attribute)</a>
       <li><a href="grpc.html#grpc.RpcMethodHandler.stream_unary">stream_unary (grpc.RpcMethodHandler attribute)</a>
 </li>
 </li>
       <li><a href="grpc.html#grpc.Channel.stream_unary">stream_unary() (grpc.Channel method)</a>
       <li><a href="grpc.html#grpc.Channel.stream_unary">stream_unary() (grpc.Channel method)</a>
+
+      <ul>
+        <li><a href="grpc_asyncio.html#grpc.experimental.aio.Channel.stream_unary">(grpc.experimental.aio.Channel method)</a>
 </li>
 </li>
+      </ul></li>
       <li><a href="grpc.html#grpc.stream_unary_rpc_method_handler">stream_unary_rpc_method_handler() (in module grpc)</a>
       <li><a href="grpc.html#grpc.stream_unary_rpc_method_handler">stream_unary_rpc_method_handler() (in module grpc)</a>
+</li>
+      <li><a href="grpc_asyncio.html#grpc.experimental.aio.StreamStreamCall">StreamStreamCall (class in grpc.experimental.aio)</a>
 </li>
 </li>
       <li><a href="grpc_testing.html#grpc_testing.StreamStreamChannelRpc">StreamStreamChannelRpc (class in grpc_testing)</a>
       <li><a href="grpc_testing.html#grpc_testing.StreamStreamChannelRpc">StreamStreamChannelRpc (class in grpc_testing)</a>
 </li>
 </li>
       <li><a href="grpc.html#grpc.StreamStreamClientInterceptor">StreamStreamClientInterceptor (class in grpc)</a>
       <li><a href="grpc.html#grpc.StreamStreamClientInterceptor">StreamStreamClientInterceptor (class in grpc)</a>
 </li>
 </li>
       <li><a href="grpc.html#grpc.StreamStreamMultiCallable">StreamStreamMultiCallable (class in grpc)</a>
       <li><a href="grpc.html#grpc.StreamStreamMultiCallable">StreamStreamMultiCallable (class in grpc)</a>
+
+      <ul>
+        <li><a href="grpc_asyncio.html#grpc.experimental.aio.StreamStreamMultiCallable">(class in grpc.experimental.aio)</a>
 </li>
 </li>
+      </ul></li>
       <li><a href="grpc_testing.html#grpc_testing.StreamStreamServerRpc">StreamStreamServerRpc (class in grpc_testing)</a>
       <li><a href="grpc_testing.html#grpc_testing.StreamStreamServerRpc">StreamStreamServerRpc (class in grpc_testing)</a>
+</li>
+      <li><a href="grpc_asyncio.html#grpc.experimental.aio.StreamUnaryCall">StreamUnaryCall (class in grpc.experimental.aio)</a>
 </li>
 </li>
       <li><a href="grpc_testing.html#grpc_testing.StreamUnaryChannelRpc">StreamUnaryChannelRpc (class in grpc_testing)</a>
       <li><a href="grpc_testing.html#grpc_testing.StreamUnaryChannelRpc">StreamUnaryChannelRpc (class in grpc_testing)</a>
 </li>
 </li>
       <li><a href="grpc.html#grpc.StreamUnaryClientInterceptor">StreamUnaryClientInterceptor (class in grpc)</a>
       <li><a href="grpc.html#grpc.StreamUnaryClientInterceptor">StreamUnaryClientInterceptor (class in grpc)</a>
 </li>
 </li>
       <li><a href="grpc.html#grpc.StreamUnaryMultiCallable">StreamUnaryMultiCallable (class in grpc)</a>
       <li><a href="grpc.html#grpc.StreamUnaryMultiCallable">StreamUnaryMultiCallable (class in grpc)</a>
+
+      <ul>
+        <li><a href="grpc_asyncio.html#grpc.experimental.aio.StreamUnaryMultiCallable">(class in grpc.experimental.aio)</a>
 </li>
 </li>
+      </ul></li>
       <li><a href="grpc_testing.html#grpc_testing.StreamUnaryServerRpc">StreamUnaryServerRpc (class in grpc_testing)</a>
       <li><a href="grpc_testing.html#grpc_testing.StreamUnaryServerRpc">StreamUnaryServerRpc (class in grpc_testing)</a>
 </li>
 </li>
       <li><a href="grpc_testing.html#grpc_testing.strict_fake_time">strict_fake_time() (in module grpc_testing)</a>
       <li><a href="grpc_testing.html#grpc_testing.strict_fake_time">strict_fake_time() (in module grpc_testing)</a>
@@ -672,8 +904,6 @@
         <li><a href="grpc_testing.html#grpc_testing.UnaryUnaryChannelRpc.terminate">(grpc_testing.UnaryUnaryChannelRpc method)</a>
         <li><a href="grpc_testing.html#grpc_testing.UnaryUnaryChannelRpc.terminate">(grpc_testing.UnaryUnaryChannelRpc method)</a>
 </li>
 </li>
       </ul></li>
       </ul></li>
-  </ul></td>
-  <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="grpc_testing.html#grpc_testing.StreamStreamServerRpc.termination">termination() (grpc_testing.StreamStreamServerRpc method)</a>
       <li><a href="grpc_testing.html#grpc_testing.StreamStreamServerRpc.termination">termination() (grpc_testing.StreamStreamServerRpc method)</a>
 
 
       <ul>
       <ul>
@@ -684,12 +914,20 @@
         <li><a href="grpc_testing.html#grpc_testing.UnaryUnaryServerRpc.termination">(grpc_testing.UnaryUnaryServerRpc method)</a>
         <li><a href="grpc_testing.html#grpc_testing.UnaryUnaryServerRpc.termination">(grpc_testing.UnaryUnaryServerRpc method)</a>
 </li>
 </li>
       </ul></li>
       </ul></li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="grpc_testing.html#grpc_testing.Time">Time (class in grpc_testing)</a>
       <li><a href="grpc_testing.html#grpc_testing.Time">Time (class in grpc_testing)</a>
 </li>
 </li>
       <li><a href="grpc_testing.html#grpc_testing.Time.time">time() (grpc_testing.Time method)</a>
       <li><a href="grpc_testing.html#grpc_testing.Time.time">time() (grpc_testing.Time method)</a>
 </li>
 </li>
-      <li><a href="grpc.html#grpc.RpcContext.time_remaining">time_remaining() (grpc.RpcContext method)</a>
+      <li><a href="grpc_asyncio.html#grpc.experimental.aio.InterceptedUnaryUnaryCall.time_remaining">time_remaining() (grpc.experimental.aio.InterceptedUnaryUnaryCall method)</a>
+
+      <ul>
+        <li><a href="grpc_asyncio.html#grpc.experimental.aio.RpcContext.time_remaining">(grpc.experimental.aio.RpcContext method)</a>
+</li>
+        <li><a href="grpc.html#grpc.RpcContext.time_remaining">(grpc.RpcContext method)</a>
 </li>
 </li>
+      </ul></li>
       <li><a href="grpc.html#grpc.ClientCallDetails.timeout">timeout (grpc.ClientCallDetails attribute)</a>
       <li><a href="grpc.html#grpc.ClientCallDetails.timeout">timeout (grpc.ClientCallDetails attribute)</a>
 </li>
 </li>
       <li><a href="grpc_status.html#grpc_status.rpc_status.to_status">to_status() (in module grpc_status.rpc_status)</a>
       <li><a href="grpc_status.html#grpc_status.rpc_status.to_status">to_status() (in module grpc_status.rpc_status)</a>
@@ -697,7 +935,15 @@
       <li><a href="grpc.html#grpc.Future.traceback">traceback() (grpc.Future method)</a>
       <li><a href="grpc.html#grpc.Future.traceback">traceback() (grpc.Future method)</a>
 </li>
 </li>
       <li><a href="grpc.html#grpc.Call.trailing_metadata">trailing_metadata() (grpc.Call method)</a>
       <li><a href="grpc.html#grpc.Call.trailing_metadata">trailing_metadata() (grpc.Call method)</a>
+
+      <ul>
+        <li><a href="grpc_asyncio.html#grpc.experimental.aio.AioRpcError.trailing_metadata">(grpc.experimental.aio.AioRpcError method)</a>
 </li>
 </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>
       <li><a href="grpc.html#grpc.ChannelConnectivity.TRANSIENT_FAILURE">TRANSIENT_FAILURE (grpc.ChannelConnectivity attribute)</a>
 </li>
 </li>
   </ul></td>
   </ul></td>
@@ -711,31 +957,55 @@
       <li><a href="grpc.html#grpc.RpcMethodHandler.unary_stream">unary_stream (grpc.RpcMethodHandler attribute)</a>
       <li><a href="grpc.html#grpc.RpcMethodHandler.unary_stream">unary_stream (grpc.RpcMethodHandler attribute)</a>
 </li>
 </li>
       <li><a href="grpc.html#grpc.Channel.unary_stream">unary_stream() (grpc.Channel method)</a>
       <li><a href="grpc.html#grpc.Channel.unary_stream">unary_stream() (grpc.Channel method)</a>
+
+      <ul>
+        <li><a href="grpc_asyncio.html#grpc.experimental.aio.Channel.unary_stream">(grpc.experimental.aio.Channel method)</a>
 </li>
 </li>
+      </ul></li>
       <li><a href="grpc.html#grpc.unary_stream_rpc_method_handler">unary_stream_rpc_method_handler() (in module grpc)</a>
       <li><a href="grpc.html#grpc.unary_stream_rpc_method_handler">unary_stream_rpc_method_handler() (in module grpc)</a>
 </li>
 </li>
       <li><a href="grpc.html#grpc.RpcMethodHandler.unary_unary">unary_unary (grpc.RpcMethodHandler attribute)</a>
       <li><a href="grpc.html#grpc.RpcMethodHandler.unary_unary">unary_unary (grpc.RpcMethodHandler attribute)</a>
 </li>
 </li>
       <li><a href="grpc.html#grpc.Channel.unary_unary">unary_unary() (grpc.Channel method)</a>
       <li><a href="grpc.html#grpc.Channel.unary_unary">unary_unary() (grpc.Channel method)</a>
+
+      <ul>
+        <li><a href="grpc_asyncio.html#grpc.experimental.aio.Channel.unary_unary">(grpc.experimental.aio.Channel method)</a>
 </li>
 </li>
+      </ul></li>
       <li><a href="grpc.html#grpc.unary_unary_rpc_method_handler">unary_unary_rpc_method_handler() (in module grpc)</a>
       <li><a href="grpc.html#grpc.unary_unary_rpc_method_handler">unary_unary_rpc_method_handler() (in module grpc)</a>
+</li>
+      <li><a href="grpc_asyncio.html#grpc.experimental.aio.UnaryStreamCall">UnaryStreamCall (class in grpc.experimental.aio)</a>
 </li>
 </li>
       <li><a href="grpc_testing.html#grpc_testing.UnaryStreamChannelRpc">UnaryStreamChannelRpc (class in grpc_testing)</a>
       <li><a href="grpc_testing.html#grpc_testing.UnaryStreamChannelRpc">UnaryStreamChannelRpc (class in grpc_testing)</a>
 </li>
 </li>
       <li><a href="grpc.html#grpc.UnaryStreamClientInterceptor">UnaryStreamClientInterceptor (class in grpc)</a>
       <li><a href="grpc.html#grpc.UnaryStreamClientInterceptor">UnaryStreamClientInterceptor (class in grpc)</a>
 </li>
 </li>
       <li><a href="grpc.html#grpc.UnaryStreamMultiCallable">UnaryStreamMultiCallable (class in grpc)</a>
       <li><a href="grpc.html#grpc.UnaryStreamMultiCallable">UnaryStreamMultiCallable (class in grpc)</a>
+
+      <ul>
+        <li><a href="grpc_asyncio.html#grpc.experimental.aio.UnaryStreamMultiCallable">(class in grpc.experimental.aio)</a>
 </li>
 </li>
+      </ul></li>
   </ul></td>
   </ul></td>
   <td style="width: 33%; vertical-align: top;"><ul>
   <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="grpc_testing.html#grpc_testing.UnaryStreamServerRpc">UnaryStreamServerRpc (class in grpc_testing)</a>
       <li><a href="grpc_testing.html#grpc_testing.UnaryStreamServerRpc">UnaryStreamServerRpc (class in grpc_testing)</a>
+</li>
+      <li><a href="grpc_asyncio.html#grpc.experimental.aio.UnaryUnaryCall">UnaryUnaryCall (class in grpc.experimental.aio)</a>
 </li>
 </li>
       <li><a href="grpc_testing.html#grpc_testing.UnaryUnaryChannelRpc">UnaryUnaryChannelRpc (class in grpc_testing)</a>
       <li><a href="grpc_testing.html#grpc_testing.UnaryUnaryChannelRpc">UnaryUnaryChannelRpc (class in grpc_testing)</a>
 </li>
 </li>
       <li><a href="grpc.html#grpc.UnaryUnaryClientInterceptor">UnaryUnaryClientInterceptor (class in grpc)</a>
       <li><a href="grpc.html#grpc.UnaryUnaryClientInterceptor">UnaryUnaryClientInterceptor (class in grpc)</a>
+
+      <ul>
+        <li><a href="grpc_asyncio.html#grpc.experimental.aio.UnaryUnaryClientInterceptor">(class in grpc.experimental.aio)</a>
 </li>
 </li>
+      </ul></li>
       <li><a href="grpc.html#grpc.UnaryUnaryMultiCallable">UnaryUnaryMultiCallable (class in grpc)</a>
       <li><a href="grpc.html#grpc.UnaryUnaryMultiCallable">UnaryUnaryMultiCallable (class in grpc)</a>
+
+      <ul>
+        <li><a href="grpc_asyncio.html#grpc.experimental.aio.UnaryUnaryMultiCallable">(class in grpc.experimental.aio)</a>
 </li>
 </li>
+      </ul></li>
       <li><a href="grpc_testing.html#grpc_testing.UnaryUnaryServerRpc">UnaryUnaryServerRpc (class in grpc_testing)</a>
       <li><a href="grpc_testing.html#grpc_testing.UnaryUnaryServerRpc">UnaryUnaryServerRpc (class in grpc_testing)</a>
 </li>
 </li>
       <li><a href="grpc.html#grpc.StatusCode.UNAUTHENTICATED">UNAUTHENTICATED (grpc.StatusCode attribute)</a>
       <li><a href="grpc.html#grpc.StatusCode.UNAUTHENTICATED">UNAUTHENTICATED (grpc.StatusCode attribute)</a>
@@ -747,6 +1017,8 @@
       <li><a href="grpc.html#grpc.StatusCode.UNKNOWN">UNKNOWN (grpc.StatusCode attribute)</a>
       <li><a href="grpc.html#grpc.StatusCode.UNKNOWN">UNKNOWN (grpc.StatusCode attribute)</a>
 </li>
 </li>
       <li><a href="grpc.html#grpc.Channel.unsubscribe">unsubscribe() (grpc.Channel method)</a>
       <li><a href="grpc.html#grpc.Channel.unsubscribe">unsubscribe() (grpc.Channel method)</a>
+</li>
+      <li><a href="grpc_asyncio.html#grpc.experimental.aio.UsageError">UsageError</a>
 </li>
 </li>
   </ul></td>
   </ul></td>
 </tr></table>
 </tr></table>
@@ -756,7 +1028,15 @@
   <td style="width: 33%; vertical-align: top;"><ul>
   <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="grpc.html#grpc.ClientCallDetails.wait_for_ready">wait_for_ready (grpc.ClientCallDetails attribute)</a>
       <li><a href="grpc.html#grpc.ClientCallDetails.wait_for_ready">wait_for_ready (grpc.ClientCallDetails attribute)</a>
 </li>
 </li>
-      <li><a href="grpc.html#grpc.Server.wait_for_termination">wait_for_termination() (grpc.Server method)</a>
+      <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>
+
+      <ul>
+        <li><a href="grpc.html#grpc.Server.wait_for_termination">(grpc.Server method)</a>
+</li>
+      </ul></li>
+      <li><a href="grpc_health_checking.html#grpc_health.v1.health.HealthServicer.Watch">Watch() (grpc_health.v1.health.HealthServicer method)</a>
 </li>
 </li>
   </ul></td>
   </ul></td>
   <td style="width: 33%; vertical-align: top;"><ul>
   <td style="width: 33%; vertical-align: top;"><ul>
@@ -764,6 +1044,14 @@
 
 
       <ul>
       <ul>
         <li><a href="grpc.html#grpc.UnaryUnaryMultiCallable.with_call">(grpc.UnaryUnaryMultiCallable method)</a>
         <li><a href="grpc.html#grpc.UnaryUnaryMultiCallable.with_call">(grpc.UnaryUnaryMultiCallable method)</a>
+</li>
+      </ul></li>
+      <li><a href="grpc_asyncio.html#grpc.experimental.aio.ServicerContext.write">write() (grpc.experimental.aio.ServicerContext method)</a>
+
+      <ul>
+        <li><a href="grpc_asyncio.html#grpc.experimental.aio.StreamStreamCall.write">(grpc.experimental.aio.StreamStreamCall method)</a>
+</li>
+        <li><a href="grpc_asyncio.html#grpc.experimental.aio.StreamUnaryCall.write">(grpc.experimental.aio.StreamUnaryCall method)</a>
 </li>
 </li>
       </ul></li>
       </ul></li>
   </ul></td>
   </ul></td>

+ 19 - 22
python/glossary.html

@@ -1,19 +1,17 @@
 
 
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!DOCTYPE html>
 
 
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
   <head>
   <head>
-    <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-    <title>Glossary &#8212; gRPC Python 1.26.0 documentation</title>
+    <meta charset="utf-8" />
+    <title>Glossary &#8212; gRPC Python 1.28.1 documentation</title>
     <link rel="stylesheet" href="_static/alabaster.css" type="text/css" />
     <link rel="stylesheet" href="_static/alabaster.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
-    <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
-    <script type="text/javascript" src="_static/jquery.js"></script>
-    <script type="text/javascript" src="_static/underscore.js"></script>
-    <script type="text/javascript" src="_static/doctools.js"></script>
-    <script type="text/javascript" src="_static/language_data.js"></script>
+    <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="index" title="Index" href="genindex.html" />
     <link rel="search" title="Search" href="search.html" />
     <link rel="search" title="Search" href="search.html" />
     <link rel="prev" title="gRPC Testing" href="grpc_testing.html" />
     <link rel="prev" title="gRPC Testing" href="grpc_testing.html" />
@@ -32,7 +30,7 @@
 
 
 
 
 
 
-<p class="blurb">1.26.0</p>
+<p class="blurb">1.28.1</p>
 
 
 
 
 
 
@@ -43,6 +41,7 @@
 <p class="caption"><span class="caption-text">Contents:</span></p>
 <p class="caption"><span class="caption-text">Contents:</span></p>
 <ul class="current">
 <ul class="current">
 <li class="toctree-l1"><a class="reference internal" href="grpc.html">gRPC</a></li>
 <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_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_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_reflection.html">gRPC Reflection</a></li>
@@ -60,17 +59,15 @@
 </ul>
 </ul>
 </div>
 </div>
 <div id="searchbox" style="display: none" role="search">
 <div id="searchbox" style="display: none" role="search">
-  <h3>Quick search</h3>
+  <h3 id="searchlabel">Quick search</h3>
     <div class="searchformwrapper">
     <div class="searchformwrapper">
     <form class="search" action="search.html" method="get">
     <form class="search" action="search.html" method="get">
-      <input type="text" name="q" />
+      <input type="text" name="q" aria-labelledby="searchlabel" />
       <input type="submit" value="Go" />
       <input type="submit" value="Go" />
-      <input type="hidden" name="check_keywords" value="yes" />
-      <input type="hidden" name="area" value="default" />
     </form>
     </form>
     </div>
     </div>
 </div>
 </div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
+<script>$('#searchbox').show(0);</script>
 
 
 
 
 
 
@@ -89,17 +86,17 @@
             
             
   <div class="section" id="glossary">
   <div class="section" id="glossary">
 <h1>Glossary<a class="headerlink" href="#glossary" title="Permalink to this headline">¶</a></h1>
 <h1>Glossary<a class="headerlink" href="#glossary" title="Permalink to this headline">¶</a></h1>
-<dl class="glossary docutils">
-<dt id="term-metadatum">metadatum</dt>
-<dd>A key-value pair included in the HTTP header.  It is a
+<dl class="glossary simple">
+<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
 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,
 second is the value, i.e. (key, value).  The metadata key is an ASCII str,
 and must be a valid HTTP header name.  The metadata value can be
 and must be a valid HTTP header name.  The metadata value can be
 either a valid HTTP ASCII str, or bytes.  If bytes are provided,
 either a valid HTTP ASCII str, or bytes.  If bytes are provided,
 the key must end with ‘-bin’, i.e.
 the key must end with ‘-bin’, i.e.
-<code class="docutils literal notranslate"><span class="pre">('binary-metadata-bin',</span> <span class="pre">b'\\x00\\xFF')</span></code></dd>
-<dt id="term-metadata">metadata</dt>
-<dd>A sequence of metadatum.</dd>
+<code class="docutils literal notranslate"><span class="pre">('binary-metadata-bin',</span> <span class="pre">b'\\x00\\xFF')</span></code></p>
+</dd>
+<dt id="term-metadata">metadata</dt><dd><p>A sequence of metadatum.</p>
+</dd>
 </dl>
 </dl>
 </div>
 </div>
 
 

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 306 - 381
python/grpc.html


+ 1624 - 0
python/grpc_asyncio.html

@@ -0,0 +1,1624 @@
+
+<!DOCTYPE html>
+
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
+  <head>
+    <meta charset="utf-8" />
+    <title>gRPC AsyncIO API &#8212; gRPC Python 1.28.1 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="next" title="gRPC Channelz" href="grpc_channelz.html" />
+    <link rel="prev" title="gRPC" href="grpc.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.28.1</p>
+
+
+
+
+
+
+<h3>Navigation</h3>
+<p class="caption"><span class="caption-text">Contents:</span></p>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="grpc.html">gRPC</a></li>
+<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="#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>
+<li class="toctree-l3"><a class="reference internal" href="#server-object">Server Object</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#grpc-exceptions">gRPC Exceptions</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#shared-context">Shared Context</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#client-side-context">Client-Side Context</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#server-side-context">Server-Side Context</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#client-side-interceptor">Client-Side Interceptor</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#multi-callable-interfaces">Multi-Callable Interfaces</a></li>
+</ul>
+</li>
+</ul>
+</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>Previous: <a href="grpc.html" title="previous chapter">gRPC</a></li>
+      <li>Next: <a href="grpc_channelz.html" title="next chapter">gRPC Channelz</a></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">
+            
+  <div class="section" id="module-grpc.experimental.aio">
+<span id="grpc-asyncio-api"></span><h1>gRPC AsyncIO API<a class="headerlink" href="#module-grpc.experimental.aio" title="Permalink to this headline">¶</a></h1>
+<div class="section" id="overview">
+<h2>Overview<a class="headerlink" href="#overview" title="Permalink to this headline">¶</a></h2>
+<p>gRPC AsyncIO API is the <strong>new version</strong> of gRPC Python whose architecture is
+tailored to AsyncIO. Underlying, it utilizes the same C-extension, gRPC C-Core,
+as existing stack, and it replaces all gRPC IO operations with methods provided
+by the AsyncIO library.</p>
+<p>This stack currently is under active development. Feel free to offer
+suggestions by opening issues on our GitHub repo <a class="reference external" href="https://github.com/grpc/grpc">grpc/grpc</a>.</p>
+<p>The design doc can be found here as <a class="reference external" href="https://github.com/grpc/proposal/pull/155">gRFC</a>.</p>
+</div>
+<div class="section" id="caveats">
+<h2>Caveats<a class="headerlink" href="#caveats" title="Permalink to this headline">¶</a></h2>
+<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="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="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
+happens, for example, managing one or more underlying connections, name
+resolution, load balancing, flow control, etc.. If you are using ProtoBuf,
+Channel objects works best when further encapsulate into stub objects, then the
+application can invoke remote functions as if they are local functions.</p>
+<dl class="function">
+<dt id="grpc.experimental.aio.insecure_channel">
+<code class="sig-prename descclassname">grpc.experimental.aio.</code><code class="sig-name descname">insecure_channel</code><span class="sig-paren">(</span><em class="sig-param">target</em>, <em class="sig-param">options=None</em>, <em class="sig-param">compression=None</em>, <em class="sig-param">interceptors=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_channel.html#insecure_channel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.insecure_channel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Creates an insecure asynchronous Channel to a server.</p>
+<dl class="field-list simple">
+<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
+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
+any call executed with this channel.</p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p>A Channel.</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="function">
+<dt id="grpc.experimental.aio.secure_channel">
+<code class="sig-prename descclassname">grpc.experimental.aio.</code><code class="sig-name descname">secure_channel</code><span class="sig-paren">(</span><em class="sig-param">target</em>, <em class="sig-param">credentials</em>, <em class="sig-param">options=None</em>, <em class="sig-param">compression=None</em>, <em class="sig-param">interceptors=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_channel.html#secure_channel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.secure_channel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Creates a secure asynchronous Channel to a server.</p>
+<dl class="field-list simple">
+<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>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
+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
+any call executed with this channel.</p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p>An aio.Channel.</p>
+</dd>
+</dl>
+</dd></dl>
+
+</div>
+<div class="section" id="channel-object">
+<h3>Channel Object<a class="headerlink" href="#channel-object" title="Permalink to this headline">¶</a></h3>
+<dl class="class">
+<dt id="grpc.experimental.aio.Channel">
+<em class="property">class </em><code class="sig-prename descclassname">grpc.experimental.aio.</code><code class="sig-name descname">Channel</code><a class="reference internal" href="_modules/grpc/experimental/aio/_base_channel.html#Channel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.Channel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Enables asynchronous RPC invocation as a client.</p>
+<p>Channel objects implement the Asynchronous Context Manager (aka. async
+with) type, although they are not supportted to be entered and exited
+multiple times.</p>
+<dl class="method">
+<dt id="grpc.experimental.aio.Channel.__aenter__">
+<em class="property">abstract async </em><code class="sig-name descname">__aenter__</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_base_channel.html#Channel.__aenter__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.Channel.__aenter__" title="Permalink to this definition">¶</a></dt>
+<dd><p>Starts an asynchronous context manager.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>Channel the channel that was instantiated.</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="method">
+<dt id="grpc.experimental.aio.Channel.__aexit__">
+<em class="property">abstract async </em><code class="sig-name descname">__aexit__</code><span class="sig-paren">(</span><em class="sig-param">exc_type</em>, <em class="sig-param">exc_val</em>, <em class="sig-param">exc_tb</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_base_channel.html#Channel.__aexit__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.Channel.__aexit__" title="Permalink to this definition">¶</a></dt>
+<dd><p>Finishes the asynchronous context manager by closing the channel.</p>
+<p>Still active RPCs will be cancelled.</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="grpc.experimental.aio.Channel.channel_ready">
+<em class="property">abstract async </em><code class="sig-name descname">channel_ready</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_base_channel.html#Channel.channel_ready"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.Channel.channel_ready" title="Permalink to this definition">¶</a></dt>
+<dd><p>Creates a coroutine that blocks until the Channel is READY.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Return type</dt>
+<dd class="field-odd"><p>None</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="method">
+<dt id="grpc.experimental.aio.Channel.close">
+<em class="property">abstract async </em><code class="sig-name descname">close</code><span class="sig-paren">(</span><em class="sig-param">grace=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_base_channel.html#Channel.close"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.Channel.close" title="Permalink to this definition">¶</a></dt>
+<dd><p>Closes this Channel and releases all resources held by it.</p>
+<p>This method immediately stops the channel from executing new RPCs in
+all cases.</p>
+<p>If a grace period is specified, this method wait until all active
+RPCs are finshed, once the grace period is reached the ones that haven’t
+been terminated are cancelled. If a grace period is not specified
+(by passing None for grace), all existing RPCs are cancelled immediately.</p>
+<p>This method is idempotent.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>grace</strong> (<em>Optional</em><em>[</em><em>float</em><em>]</em>) – </p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="method">
+<dt id="grpc.experimental.aio.Channel.get_state">
+<em class="property">abstract </em><code class="sig-name descname">get_state</code><span class="sig-paren">(</span><em class="sig-param">try_to_connect=False</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_base_channel.html#Channel.get_state"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.Channel.get_state" title="Permalink to this definition">¶</a></dt>
+<dd><p>Checks the connectivity state of a channel.</p>
+<p>This is an EXPERIMENTAL API.</p>
+<p>If the channel reaches a stable connectivity state, it is guaranteed
+that the return value of this function will eventually converge to that
+state.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>try_to_connect</strong> (<em>bool</em>) – a bool indicate whether the Channel should try to
+connect to peer or not.</p>
+</dd>
+<dt class="field-even">Return type</dt>
+<dd class="field-even"><p><a class="reference internal" href="grpc.html#grpc.ChannelConnectivity" title="grpc.ChannelConnectivity">grpc.ChannelConnectivity</a></p>
+</dd>
+</dl>
+<p>Returns: A ChannelConnectivity object.</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="grpc.experimental.aio.Channel.stream_stream">
+<em class="property">abstract </em><code class="sig-name descname">stream_stream</code><span class="sig-paren">(</span><em class="sig-param">method</em>, <em class="sig-param">request_serializer=None</em>, <em class="sig-param">response_deserializer=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_base_channel.html#Channel.stream_stream"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.Channel.stream_stream" title="Permalink to this definition">¶</a></dt>
+<dd><p>Creates a StreamStreamMultiCallable for a stream-stream method.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>method</strong> (<em>str</em>) – The name of the RPC method.</p></li>
+<li><p><strong>request_serializer</strong> (<em>Optional</em><em>[</em><em>Callable</em><em>[</em><em>[</em><em>Any</em><em>]</em><em>, </em><em>bytes</em><em>]</em><em>]</em>) – Optional behaviour for serializing the request
+message. Request goes unserialized in case None is passed.</p></li>
+<li><p><strong>response_deserializer</strong> (<em>Optional</em><em>[</em><em>Callable</em><em>[</em><em>[</em><em>bytes</em><em>]</em><em>, </em><em>Any</em><em>]</em><em>]</em>) – Optional behaviour for deserializing the
+response message. Response goes undeserialized in case None
+is passed.</p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p>A StreamStreamMultiCallable value for the named stream-stream method.</p>
+</dd>
+<dt class="field-odd">Return type</dt>
+<dd class="field-odd"><p>grpc.experimental.aio._base_channel.StreamStreamMultiCallable</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="method">
+<dt id="grpc.experimental.aio.Channel.stream_unary">
+<em class="property">abstract </em><code class="sig-name descname">stream_unary</code><span class="sig-paren">(</span><em class="sig-param">method</em>, <em class="sig-param">request_serializer=None</em>, <em class="sig-param">response_deserializer=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_base_channel.html#Channel.stream_unary"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.Channel.stream_unary" title="Permalink to this definition">¶</a></dt>
+<dd><p>Creates a StreamUnaryMultiCallable for a stream-unary method.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>method</strong> (<em>str</em>) – The name of the RPC method.</p></li>
+<li><p><strong>request_serializer</strong> (<em>Optional</em><em>[</em><em>Callable</em><em>[</em><em>[</em><em>Any</em><em>]</em><em>, </em><em>bytes</em><em>]</em><em>]</em>) – Optional behaviour for serializing the request
+message. Request goes unserialized in case None is passed.</p></li>
+<li><p><strong>response_deserializer</strong> (<em>Optional</em><em>[</em><em>Callable</em><em>[</em><em>[</em><em>bytes</em><em>]</em><em>, </em><em>Any</em><em>]</em><em>]</em>) – Optional behaviour for deserializing the
+response message. Response goes undeserialized in case None
+is passed.</p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p>A StreamUnaryMultiCallable value for the named stream-unary method.</p>
+</dd>
+<dt class="field-odd">Return type</dt>
+<dd class="field-odd"><p>grpc.experimental.aio._base_channel.StreamUnaryMultiCallable</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="method">
+<dt id="grpc.experimental.aio.Channel.unary_stream">
+<em class="property">abstract </em><code class="sig-name descname">unary_stream</code><span class="sig-paren">(</span><em class="sig-param">method</em>, <em class="sig-param">request_serializer=None</em>, <em class="sig-param">response_deserializer=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_base_channel.html#Channel.unary_stream"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.Channel.unary_stream" title="Permalink to this definition">¶</a></dt>
+<dd><p>Creates a UnaryStreamMultiCallable for a unary-stream method.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>method</strong> (<em>str</em>) – The name of the RPC method.</p></li>
+<li><p><strong>request_serializer</strong> (<em>Optional</em><em>[</em><em>Callable</em><em>[</em><em>[</em><em>Any</em><em>]</em><em>, </em><em>bytes</em><em>]</em><em>]</em>) – Optional behaviour for serializing the request
+message. Request goes unserialized in case None is passed.</p></li>
+<li><p><strong>response_deserializer</strong> (<em>Optional</em><em>[</em><em>Callable</em><em>[</em><em>[</em><em>bytes</em><em>]</em><em>, </em><em>Any</em><em>]</em><em>]</em>) – Optional behaviour for deserializing the
+response message. Response goes undeserialized in case None
+is passed.</p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p>A UnarySteramMultiCallable value for the named unary-stream method.</p>
+</dd>
+<dt class="field-odd">Return type</dt>
+<dd class="field-odd"><p>grpc.experimental.aio._base_channel.UnaryStreamMultiCallable</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="method">
+<dt id="grpc.experimental.aio.Channel.unary_unary">
+<em class="property">abstract </em><code class="sig-name descname">unary_unary</code><span class="sig-paren">(</span><em class="sig-param">method</em>, <em class="sig-param">request_serializer=None</em>, <em class="sig-param">response_deserializer=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_base_channel.html#Channel.unary_unary"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.Channel.unary_unary" title="Permalink to this definition">¶</a></dt>
+<dd><p>Creates a UnaryUnaryMultiCallable for a unary-unary method.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>method</strong> (<em>str</em>) – The name of the RPC method.</p></li>
+<li><p><strong>request_serializer</strong> (<em>Optional</em><em>[</em><em>Callable</em><em>[</em><em>[</em><em>Any</em><em>]</em><em>, </em><em>bytes</em><em>]</em><em>]</em>) – Optional behaviour for serializing the request
+message. Request goes unserialized in case None is passed.</p></li>
+<li><p><strong>response_deserializer</strong> (<em>Optional</em><em>[</em><em>Callable</em><em>[</em><em>[</em><em>bytes</em><em>]</em><em>, </em><em>Any</em><em>]</em><em>]</em>) – Optional behaviour for deserializing the
+response message. Response goes undeserialized in case None
+is passed.</p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p>A UnaryUnaryMultiCallable value for the named unary-unary method.</p>
+</dd>
+<dt class="field-odd">Return type</dt>
+<dd class="field-odd"><p>grpc.experimental.aio._base_channel.UnaryUnaryMultiCallable</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="method">
+<dt id="grpc.experimental.aio.Channel.wait_for_state_change">
+<em class="property">abstract async </em><code class="sig-name descname">wait_for_state_change</code><span class="sig-paren">(</span><em class="sig-param">last_observed_state</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_base_channel.html#Channel.wait_for_state_change"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.Channel.wait_for_state_change" title="Permalink to this definition">¶</a></dt>
+<dd><p>Waits for a change in connectivity state.</p>
+<p>This is an EXPERIMENTAL API.</p>
+<p>The function blocks until there is a change in the channel connectivity
+state from the “last_observed_state”. If the state is already
+different, this function will return immediately.</p>
+<p>There is an inherent race between the invocation of
+“Channel.wait_for_state_change” and “Channel.get_state”. The state can
+change arbitrary many times during the race, so there is no way to
+observe every state transition.</p>
+<p>If there is a need to put a timeout for this function, please refer to
+“asyncio.wait_for”.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>last_observed_state</strong> (<a class="reference internal" href="grpc.html#grpc.ChannelConnectivity" title="grpc.ChannelConnectivity"><em>grpc.ChannelConnectivity</em></a>) – A grpc.ChannelConnectivity object representing
+the last known state.</p>
+</dd>
+<dt class="field-even">Return type</dt>
+<dd class="field-even"><p>None</p>
+</dd>
+</dl>
+</dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="create-server">
+<h3>Create Server<a class="headerlink" href="#create-server" title="Permalink to this headline">¶</a></h3>
+<dl class="function">
+<dt id="grpc.experimental.aio.server">
+<code class="sig-prename descclassname">grpc.experimental.aio.</code><code class="sig-name descname">server</code><span class="sig-paren">(</span><em class="sig-param">migration_thread_pool=None</em>, <em class="sig-param">handlers=None</em>, <em class="sig-param">interceptors=None</em>, <em class="sig-param">options=None</em>, <em class="sig-param">maximum_concurrent_rpcs=None</em>, <em class="sig-param">compression=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_server.html#server"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.server" title="Permalink to this definition">¶</a></dt>
+<dd><p>Creates a Server with which RPCs can be serviced.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>migration_thread_pool</strong> (<em>Optional</em><em>[</em><em>concurrent.futures._base.Executor</em><em>]</em>) – A futures.ThreadPoolExecutor to be used by the
+Server to execute non-AsyncIO RPC handlers for migration purpose.</p></li>
+<li><p><strong>handlers</strong> (<em>Optional</em><em>[</em><em>Sequence</em><em>[</em><a class="reference internal" href="grpc.html#grpc.GenericRpcHandler" title="grpc.GenericRpcHandler"><em>grpc.GenericRpcHandler</em></a><em>]</em><em>]</em>) – An optional list of GenericRpcHandlers used for executing RPCs.
+More handlers may be added by calling add_generic_rpc_handlers any time
+before the server is started.</p></li>
+<li><p><strong>interceptors</strong> (<em>Optional</em><em>[</em><em>Sequence</em><em>[</em><em>Any</em><em>]</em><em>]</em>) – An optional list of ServerInterceptor objects that observe
+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)
+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
+indicate no limit.</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 compression algorithm will be used for the
+lifetime of the server unless overridden by set_compression. This is an
+EXPERIMENTAL option.</p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p>A Server object.</p>
+</dd>
+</dl>
+</dd></dl>
+
+</div>
+<div class="section" id="server-object">
+<h3>Server Object<a class="headerlink" href="#server-object" title="Permalink to this headline">¶</a></h3>
+<dl class="class">
+<dt id="grpc.experimental.aio.Server">
+<em class="property">class </em><code class="sig-prename descclassname">grpc.experimental.aio.</code><code class="sig-name descname">Server</code><a class="reference internal" href="_modules/grpc/experimental/aio/_base_server.html#Server"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.Server" title="Permalink to this definition">¶</a></dt>
+<dd><p>Serves RPCs.</p>
+<dl class="method">
+<dt id="grpc.experimental.aio.Server.add_generic_rpc_handlers">
+<em class="property">abstract </em><code class="sig-name descname">add_generic_rpc_handlers</code><span class="sig-paren">(</span><em class="sig-param">generic_rpc_handlers</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_base_server.html#Server.add_generic_rpc_handlers"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.Server.add_generic_rpc_handlers" title="Permalink to this definition">¶</a></dt>
+<dd><p>Registers GenericRpcHandlers with this Server.</p>
+<p>This method is only safe to call before the server is started.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>generic_rpc_handlers</strong> (<em>Sequence</em><em>[</em><a class="reference internal" href="grpc.html#grpc.GenericRpcHandler" title="grpc.GenericRpcHandler"><em>grpc.GenericRpcHandler</em></a><em>]</em>) – A sequence of GenericRpcHandlers that will be</p></li>
+<li><p><strong>to service RPCs.</strong> (<em>used</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="method">
+<dt id="grpc.experimental.aio.Server.add_insecure_port">
+<em class="property">abstract </em><code class="sig-name descname">add_insecure_port</code><span class="sig-paren">(</span><em class="sig-param">address</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_base_server.html#Server.add_insecure_port"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.Server.add_insecure_port" title="Permalink to this definition">¶</a></dt>
+<dd><p>Opens an insecure port for accepting RPCs.</p>
+<p>A port is a communication endpoint that used by networking protocols,
+like TCP and UDP. To date, we only support TCP.</p>
+<p>This method may only be called before starting the server.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>address</strong> (<em>str</em>) – The address for which to open a port. If the port is 0,
+or not specified in the address, then the gRPC runtime will choose a port.</p>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p>An integer port on which the server will accept RPC requests.</p>
+</dd>
+<dt class="field-odd">Return type</dt>
+<dd class="field-odd"><p>int</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="method">
+<dt id="grpc.experimental.aio.Server.add_secure_port">
+<em class="property">abstract </em><code class="sig-name descname">add_secure_port</code><span class="sig-paren">(</span><em class="sig-param">address</em>, <em class="sig-param">server_credentials</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_base_server.html#Server.add_secure_port"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.Server.add_secure_port" title="Permalink to this definition">¶</a></dt>
+<dd><p>Opens a secure port for accepting RPCs.</p>
+<p>A port is a communication endpoint that used by networking protocols,
+like TCP and UDP. To date, we only support TCP.</p>
+<p>This method may only be called before starting the server.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>address</strong> (<em>str</em>) – The address for which to open a port.
+if the port is 0, or not specified in the address, then the gRPC
+runtime will choose a port.</p></li>
+<li><p><strong>server_credentials</strong> (<a class="reference internal" href="grpc.html#grpc.ServerCredentials" title="grpc.ServerCredentials"><em>grpc.ServerCredentials</em></a>) – A ServerCredentials object.</p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p>An integer port on which the server will accept RPC requests.</p>
+</dd>
+<dt class="field-odd">Return type</dt>
+<dd class="field-odd"><p>int</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="method">
+<dt id="grpc.experimental.aio.Server.start">
+<em class="property">abstract async </em><code class="sig-name descname">start</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_base_server.html#Server.start"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.Server.start" title="Permalink to this definition">¶</a></dt>
+<dd><p>Starts this Server.</p>
+<p>This method may only be called once. (i.e. it is not idempotent).</p>
+<dl class="field-list simple">
+<dt class="field-odd">Return type</dt>
+<dd class="field-odd"><p>None</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="method">
+<dt id="grpc.experimental.aio.Server.stop">
+<em class="property">abstract async </em><code class="sig-name descname">stop</code><span class="sig-paren">(</span><em class="sig-param">grace</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_base_server.html#Server.stop"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.Server.stop" title="Permalink to this definition">¶</a></dt>
+<dd><p>Stops this Server.</p>
+<p>This method immediately stops the server from servicing new RPCs in
+all cases.</p>
+<p>If a grace period is specified, this method returns immediately and all
+RPCs active at the end of the grace period are aborted. If a grace
+period is not specified (by passing None for grace), all existing RPCs
+are aborted immediately and this method blocks until the last RPC
+handler terminates.</p>
+<p>This method is idempotent and may be called at any time. Passing a
+smaller grace value in a subsequent call will have the effect of
+stopping the Server sooner (passing None will have the effect of
+stopping the server immediately). Passing a larger grace value in a
+subsequent call will not have the effect of stopping the server later
+(i.e. the most restrictive grace value is used).</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>grace</strong> (<em>Optional</em><em>[</em><em>float</em><em>]</em>) – A duration of time in seconds or None.</p>
+</dd>
+<dt class="field-even">Return type</dt>
+<dd class="field-even"><p>None</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="method">
+<dt id="grpc.experimental.aio.Server.wait_for_termination">
+<em class="property">abstract async </em><code class="sig-name descname">wait_for_termination</code><span class="sig-paren">(</span><em class="sig-param">timeout=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_base_server.html#Server.wait_for_termination"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.Server.wait_for_termination" title="Permalink to this definition">¶</a></dt>
+<dd><p>Continues current coroutine once the server stops.</p>
+<p>This is an EXPERIMENTAL API.</p>
+<p>The wait will not consume computational resources during blocking, and
+it will block until one of the two following conditions are met:</p>
+<ol class="arabic simple">
+<li><p>The server is stopped or terminated;</p></li>
+<li><p>A timeout occurs if timeout is not <cite>None</cite>.</p></li>
+</ol>
+<p>The timeout argument works in the same way as <cite>threading.Event.wait()</cite>.
+<a class="reference external" href="https://docs.python.org/3/library/threading.html#threading.Event.wait">https://docs.python.org/3/library/threading.html#threading.Event.wait</a></p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>timeout</strong> (<em>Optional</em><em>[</em><em>float</em><em>]</em>) – A floating point number specifying a timeout for the
+operation in seconds.</p>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p>A bool indicates if the operation times out.</p>
+</dd>
+<dt class="field-odd">Return type</dt>
+<dd class="field-odd"><p>bool</p>
+</dd>
+</dl>
+</dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="grpc-exceptions">
+<h3>gRPC Exceptions<a class="headerlink" href="#grpc-exceptions" title="Permalink to this headline">¶</a></h3>
+<dl class="exception">
+<dt id="grpc.experimental.aio.BaseError">
+<em class="property">exception </em><code class="sig-prename descclassname">grpc.experimental.aio.</code><code class="sig-name descname">BaseError</code><a class="headerlink" href="#grpc.experimental.aio.BaseError" title="Permalink to this definition">¶</a></dt>
+<dd><p>The base class for exceptions generated by gRPC AsyncIO stack.</p>
+</dd></dl>
+
+<dl class="exception">
+<dt id="grpc.experimental.aio.UsageError">
+<em class="property">exception </em><code class="sig-prename descclassname">grpc.experimental.aio.</code><code class="sig-name descname">UsageError</code><a class="headerlink" href="#grpc.experimental.aio.UsageError" title="Permalink to this definition">¶</a></dt>
+<dd><p>Raised when the usage of API by applications is inappropriate.</p>
+<p>For example, trying to invoke RPC on a closed channel, mixing two styles
+of streaming API on the client side. This exception should not be
+suppressed.</p>
+</dd></dl>
+
+<dl class="exception">
+<dt id="grpc.experimental.aio.AbortError">
+<em class="property">exception </em><code class="sig-prename descclassname">grpc.experimental.aio.</code><code class="sig-name descname">AbortError</code><a class="headerlink" href="#grpc.experimental.aio.AbortError" title="Permalink to this definition">¶</a></dt>
+<dd><p>Raised when calling abort in servicer methods.</p>
+<p>This exception should not be suppressed. Applications may catch it to
+perform certain clean-up logic, and then re-raise it.</p>
+</dd></dl>
+
+<dl class="exception">
+<dt id="grpc.experimental.aio.InternalError">
+<em class="property">exception </em><code class="sig-prename descclassname">grpc.experimental.aio.</code><code class="sig-name descname">InternalError</code><a class="headerlink" href="#grpc.experimental.aio.InternalError" title="Permalink to this definition">¶</a></dt>
+<dd><p>Raised upon unexpected errors in native code.</p>
+</dd></dl>
+
+<dl class="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">code</em>, <em class="sig-param">details=None</em>, <em class="sig-param">initial_metadata=None</em>, <em class="sig-param">trailing_metadata=None</em>, <em class="sig-param">debug_error_string=None</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>
+<dl class="field-list simple">
+<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>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>
+<dt class="field-even">Return type</dt>
+<dd class="field-even"><p>None</p>
+</dd>
+</dl>
+<dl class="method">
+<dt id="grpc.experimental.aio.AioRpcError.code">
+<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/_call.html#AioRpcError.code"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.AioRpcError.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 <cite>grpc.StatusCode</cite> status code.</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="method">
+<dt id="grpc.experimental.aio.AioRpcError.debug_error_string">
+<code class="sig-name descname">debug_error_string</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_call.html#AioRpcError.debug_error_string"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.AioRpcError.debug_error_string" title="Permalink to this definition">¶</a></dt>
+<dd><p>Accesses the debug error string sent by the server.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>The debug error string received.</p>
+</dd>
+<dt class="field-even">Return type</dt>
+<dd class="field-even"><p>str</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="method">
+<dt id="grpc.experimental.aio.AioRpcError.details">
+<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/_call.html#AioRpcError.details"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.AioRpcError.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 description of the error.</p>
+</dd>
+<dt class="field-even">Return type</dt>
+<dd class="field-even"><p>Optional[str]</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="method">
+<dt id="grpc.experimental.aio.AioRpcError.initial_metadata">
+<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/_call.html#AioRpcError.initial_metadata"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.AioRpcError.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 metadata received.</p>
+</dd>
+<dt class="field-even">Return type</dt>
+<dd class="field-even"><p>Optional[Dict]</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="method">
+<dt id="grpc.experimental.aio.AioRpcError.trailing_metadata">
+<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/_call.html#AioRpcError.trailing_metadata"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.AioRpcError.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 metadata received.</p>
+</dd>
+<dt class="field-even">Return type</dt>
+<dd class="field-even"><p>Optional[Dict]</p>
+</dd>
+</dl>
+</dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="shared-context">
+<h3>Shared Context<a class="headerlink" href="#shared-context" title="Permalink to this headline">¶</a></h3>
+<dl class="class">
+<dt id="grpc.experimental.aio.RpcContext">
+<em class="property">class </em><code class="sig-prename descclassname">grpc.experimental.aio.</code><code class="sig-name descname">RpcContext</code><a class="reference internal" href="_modules/grpc/experimental/aio/_base_call.html#RpcContext"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.RpcContext" title="Permalink to this definition">¶</a></dt>
+<dd><p>Provides RPC-related information and action.</p>
+<dl class="method">
+<dt id="grpc.experimental.aio.RpcContext.add_done_callback">
+<em class="property">abstract </em><code class="sig-name descname">add_done_callback</code><span class="sig-paren">(</span><em class="sig-param">callback</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_base_call.html#RpcContext.add_done_callback"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.RpcContext.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="method">
+<dt id="grpc.experimental.aio.RpcContext.cancel">
+<em class="property">abstract </em><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/_base_call.html#RpcContext.cancel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.RpcContext.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="method">
+<dt id="grpc.experimental.aio.RpcContext.cancelled">
+<em class="property">abstract </em><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/_base_call.html#RpcContext.cancelled"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.RpcContext.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="method">
+<dt id="grpc.experimental.aio.RpcContext.done">
+<em class="property">abstract </em><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/_base_call.html#RpcContext.done"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.RpcContext.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="method">
+<dt id="grpc.experimental.aio.RpcContext.time_remaining">
+<em class="property">abstract </em><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/_base_call.html#RpcContext.time_remaining"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.RpcContext.time_remaining" title="Permalink to this definition">¶</a></dt>
+<dd><p>Describes the length of allowed time remaining for the RPC.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>A nonnegative float indicating the length of allowed time in seconds
+remaining for the RPC to complete before it is considered to have
+timed out, or None if no deadline was specified for the RPC.</p>
+</dd>
+<dt class="field-even">Return type</dt>
+<dd class="field-even"><p>Optional[float]</p>
+</dd>
+</dl>
+</dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="client-side-context">
+<h3>Client-Side Context<a class="headerlink" href="#client-side-context" title="Permalink to this headline">¶</a></h3>
+<dl class="class">
+<dt id="grpc.experimental.aio.Call">
+<em class="property">class </em><code class="sig-prename descclassname">grpc.experimental.aio.</code><code class="sig-name descname">Call</code><a class="reference internal" href="_modules/grpc/experimental/aio/_base_call.html#Call"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.Call" title="Permalink to this definition">¶</a></dt>
+<dd><p>The abstract base class of an RPC on the client-side.</p>
+<dl class="method">
+<dt id="grpc.experimental.aio.Call.code">
+<em class="property">abstract 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/_base_call.html#Call.code"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.Call.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="method">
+<dt id="grpc.experimental.aio.Call.details">
+<em class="property">abstract 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/_base_call.html#Call.details"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.Call.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="method">
+<dt id="grpc.experimental.aio.Call.initial_metadata">
+<em class="property">abstract 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/_base_call.html#Call.initial_metadata"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.Call.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>Sequence[Tuple[str, AnyStr]]</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="method">
+<dt id="grpc.experimental.aio.Call.trailing_metadata">
+<em class="property">abstract 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/_base_call.html#Call.trailing_metadata"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.Call.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>Sequence[Tuple[str, AnyStr]]</p>
+</dd>
+</dl>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="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>
+<dd><p>The abstract base class of an unary-unary RPC on the client-side.</p>
+<dl class="method">
+<dt id="grpc.experimental.aio.UnaryUnaryCall.__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#UnaryUnaryCall.__await__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.UnaryUnaryCall.__await__" title="Permalink to this definition">¶</a></dt>
+<dd><p>Await the response message to be ready.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>The response message of the RPC.</p>
+</dd>
+<dt class="field-even">Return type</dt>
+<dd class="field-even"><p>Awaitable[ResponseType]</p>
+</dd>
+</dl>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="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>
+<dd><dl class="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>
+<dd><p>Returns the async iterable representation that yields messages.</p>
+<p>Under the hood, it is calling the “read” method.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>An async iterable object that yields messages.</p>
+</dd>
+<dt class="field-even">Return type</dt>
+<dd class="field-even"><p>AsyncIterable[ResponseType]</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="method">
+<dt id="grpc.experimental.aio.UnaryStreamCall.read">
+<em class="property">abstract async </em><code class="sig-name descname">read</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_base_call.html#UnaryStreamCall.read"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.UnaryStreamCall.read" title="Permalink to this definition">¶</a></dt>
+<dd><p>Reads one message from the stream.</p>
+<p>Read operations must be serialized when called from multiple
+coroutines.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>A response message, or an <cite>grpc.aio.EOF</cite> to indicate the end of the
+stream.</p>
+</dd>
+<dt class="field-even">Return type</dt>
+<dd class="field-even"><p>Union[grpc._cython.cygrpc._EOF, ResponseType]</p>
+</dd>
+</dl>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="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>
+<dd><dl class="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>
+<dd><p>Await the response message to be ready.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>The response message of the stream.</p>
+</dd>
+<dt class="field-even">Return type</dt>
+<dd class="field-even"><p>Awaitable[ResponseType]</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="method">
+<dt id="grpc.experimental.aio.StreamUnaryCall.done_writing">
+<em class="property">abstract async </em><code class="sig-name descname">done_writing</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_base_call.html#StreamUnaryCall.done_writing"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.StreamUnaryCall.done_writing" title="Permalink to this definition">¶</a></dt>
+<dd><p>Notifies server that the client is done sending messages.</p>
+<p>After done_writing is called, any additional invocation to the write
+function will fail. This function is idempotent.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Return type</dt>
+<dd class="field-odd"><p>None</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="method">
+<dt id="grpc.experimental.aio.StreamUnaryCall.write">
+<em class="property">abstract async </em><code class="sig-name descname">write</code><span class="sig-paren">(</span><em class="sig-param">request</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_base_call.html#StreamUnaryCall.write"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.StreamUnaryCall.write" title="Permalink to this definition">¶</a></dt>
+<dd><p>Writes one message to the stream.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Raises</dt>
+<dd class="field-odd"><p><strong>An RpcError exception if the write failed.</strong> – </p>
+</dd>
+<dt class="field-even">Parameters</dt>
+<dd class="field-even"><p><strong>request</strong> (<em>RequestType</em>) – </p>
+</dd>
+<dt class="field-odd">Return type</dt>
+<dd class="field-odd"><p>None</p>
+</dd>
+</dl>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="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>
+<dd><dl class="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>
+<dd><p>Returns the async iterable representation that yields messages.</p>
+<p>Under the hood, it is calling the “read” method.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>An async iterable object that yields messages.</p>
+</dd>
+<dt class="field-even">Return type</dt>
+<dd class="field-even"><p>AsyncIterable[ResponseType]</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="method">
+<dt id="grpc.experimental.aio.StreamStreamCall.done_writing">
+<em class="property">abstract async </em><code class="sig-name descname">done_writing</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_base_call.html#StreamStreamCall.done_writing"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.StreamStreamCall.done_writing" title="Permalink to this definition">¶</a></dt>
+<dd><p>Notifies server that the client is done sending messages.</p>
+<p>After done_writing is called, any additional invocation to the write
+function will fail. This function is idempotent.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Return type</dt>
+<dd class="field-odd"><p>None</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="method">
+<dt id="grpc.experimental.aio.StreamStreamCall.read">
+<em class="property">abstract async </em><code class="sig-name descname">read</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_base_call.html#StreamStreamCall.read"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.StreamStreamCall.read" title="Permalink to this definition">¶</a></dt>
+<dd><p>Reads one message from the stream.</p>
+<p>Read operations must be serialized when called from multiple
+coroutines.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>A response message, or an <cite>grpc.aio.EOF</cite> to indicate the end of the
+stream.</p>
+</dd>
+<dt class="field-even">Return type</dt>
+<dd class="field-even"><p>Union[grpc._cython.cygrpc._EOF, ResponseType]</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="method">
+<dt id="grpc.experimental.aio.StreamStreamCall.write">
+<em class="property">abstract async </em><code class="sig-name descname">write</code><span class="sig-paren">(</span><em class="sig-param">request</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_base_call.html#StreamStreamCall.write"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.StreamStreamCall.write" title="Permalink to this definition">¶</a></dt>
+<dd><p>Writes one message to the stream.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Raises</dt>
+<dd class="field-odd"><p><strong>An RpcError exception if the write failed.</strong> – </p>
+</dd>
+<dt class="field-even">Parameters</dt>
+<dd class="field-even"><p><strong>request</strong> (<em>RequestType</em>) – </p>
+</dd>
+<dt class="field-odd">Return type</dt>
+<dd class="field-odd"><p>None</p>
+</dd>
+</dl>
+</dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="server-side-context">
+<h3>Server-Side Context<a class="headerlink" href="#server-side-context" title="Permalink to this headline">¶</a></h3>
+<dl class="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>
+<dd><p>A context object passed to method implementations.</p>
+<dl class="method">
+<dt id="grpc.experimental.aio.ServicerContext.abort">
+<em class="property">abstract async </em><code class="sig-name descname">abort</code><span class="sig-paren">(</span><em class="sig-param">code</em>, <em class="sig-param">details</em>, <em class="sig-param">trailing_metadata</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_base_server.html#ServicerContext.abort"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.ServicerContext.abort" title="Permalink to this definition">¶</a></dt>
+<dd><p>Raises an exception to terminate the RPC with a non-OK status.</p>
+<p>The code and details passed as arguments will supercede any existing
+ones.</p>
+<dl class="field-list simple">
+<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>) – A StatusCode object to be sent to the client.
+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
+<a class="reference internal" href="glossary.html#term-metadata"><span class="xref std std-term">metadata</span></a>.</p></li>
+</ul>
+</dd>
+<dt class="field-even">Raises</dt>
+<dd class="field-even"><p><strong>Exception</strong> – An exception is always raised to signal the abortion the
+    RPC to the gRPC runtime.</p>
+</dd>
+<dt class="field-odd">Return type</dt>
+<dd class="field-odd"><p>None</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="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>
+<dd><p>Disables compression for the next response message.</p>
+<p>This is an EXPERIMENTAL method.</p>
+<p>This method will override any compression configuration set during
+server creation or set on the call.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Return type</dt>
+<dd class="field-odd"><p>None</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="method">
+<dt id="grpc.experimental.aio.ServicerContext.invocation_metadata">
+<em class="property">abstract </em><code class="sig-name descname">invocation_metadata</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_base_server.html#ServicerContext.invocation_metadata"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.ServicerContext.invocation_metadata" title="Permalink to this definition">¶</a></dt>
+<dd><p>Accesses the metadata from the sent by the client.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Returns</dt>
+<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>
+</dl>
+</dd></dl>
+
+<dl class="method">
+<dt id="grpc.experimental.aio.ServicerContext.read">
+<em class="property">abstract async </em><code class="sig-name descname">read</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_base_server.html#ServicerContext.read"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.ServicerContext.read" title="Permalink to this definition">¶</a></dt>
+<dd><p>Reads one message from the RPC.</p>
+<p>Only one read operation is allowed simultaneously.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>A response message of the RPC.</p>
+</dd>
+<dt class="field-even">Raises</dt>
+<dd class="field-even"><p><strong>An RpcError exception if the read failed.</strong> – </p>
+</dd>
+<dt class="field-odd">Return type</dt>
+<dd class="field-odd"><p>RequestType</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="method">
+<dt id="grpc.experimental.aio.ServicerContext.send_initial_metadata">
+<em class="property">abstract async </em><code class="sig-name descname">send_initial_metadata</code><span class="sig-paren">(</span><em class="sig-param">initial_metadata</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_base_server.html#ServicerContext.send_initial_metadata"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.ServicerContext.send_initial_metadata" title="Permalink to this definition">¶</a></dt>
+<dd><p>Sends the initial metadata value to the client.</p>
+<p>This method need not be called by implementations if they have no
+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>
+<dt class="field-even">Return type</dt>
+<dd class="field-even"><p>None</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="method">
+<dt id="grpc.experimental.aio.ServicerContext.set_code">
+<em class="property">abstract </em><code class="sig-name descname">set_code</code><span class="sig-paren">(</span><em class="sig-param">code</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_base_server.html#ServicerContext.set_code"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.ServicerContext.set_code" title="Permalink to this definition">¶</a></dt>
+<dd><p>Sets the value to be used as status code upon RPC completion.</p>
+<p>This method need not be called by method implementations if they wish
+the gRPC runtime to determine the status code of the RPC.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>code</strong> (<a class="reference internal" href="grpc.html#grpc.StatusCode" title="grpc.StatusCode"><em>grpc.StatusCode</em></a>) – A StatusCode object to be sent to the client.</p>
+</dd>
+<dt class="field-even">Return type</dt>
+<dd class="field-even"><p>None</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="method">
+<dt id="grpc.experimental.aio.ServicerContext.set_compression">
+<em class="property">abstract </em><code class="sig-name descname">set_compression</code><span class="sig-paren">(</span><em class="sig-param">compression</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_base_server.html#ServicerContext.set_compression"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.ServicerContext.set_compression" title="Permalink to this definition">¶</a></dt>
+<dd><p>Set the compression algorithm to be used for the entire call.</p>
+<p>This is an EXPERIMENTAL method.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>compression</strong> (<a class="reference internal" href="grpc.html#grpc.Compression" title="grpc.Compression"><em>grpc.Compression</em></a>) – An element of grpc.compression, e.g.
+grpc.compression.Gzip.</p>
+</dd>
+<dt class="field-even">Return type</dt>
+<dd class="field-even"><p>None</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="method">
+<dt id="grpc.experimental.aio.ServicerContext.set_details">
+<em class="property">abstract </em><code class="sig-name descname">set_details</code><span class="sig-paren">(</span><em class="sig-param">details</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_base_server.html#ServicerContext.set_details"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.ServicerContext.set_details" title="Permalink to this definition">¶</a></dt>
+<dd><p>Sets the value to be used the as detail string upon RPC completion.</p>
+<p>This method need not be called by method implementations if they have
+no details to transmit.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>details</strong> (<em>str</em>) – A UTF-8-encodable string to be sent to the client upon
+termination of the RPC.</p>
+</dd>
+<dt class="field-even">Return type</dt>
+<dd class="field-even"><p>None</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="method">
+<dt id="grpc.experimental.aio.ServicerContext.set_trailing_metadata">
+<em class="property">abstract async </em><code class="sig-name descname">set_trailing_metadata</code><span class="sig-paren">(</span><em class="sig-param">trailing_metadata</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_base_server.html#ServicerContext.set_trailing_metadata"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.ServicerContext.set_trailing_metadata" title="Permalink to this definition">¶</a></dt>
+<dd><p>Sends the trailing metadata for the RPC.</p>
+<p>This method need not be called by implementations if they have no
+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>
+<dt class="field-even">Return type</dt>
+<dd class="field-even"><p>None</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="method">
+<dt id="grpc.experimental.aio.ServicerContext.write">
+<em class="property">abstract async </em><code class="sig-name descname">write</code><span class="sig-paren">(</span><em class="sig-param">message</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_base_server.html#ServicerContext.write"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.ServicerContext.write" title="Permalink to this definition">¶</a></dt>
+<dd><p>Writes one message to the RPC.</p>
+<p>Only one write operation is allowed simultaneously.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Raises</dt>
+<dd class="field-odd"><p><strong>An RpcError exception if the write failed.</strong> – </p>
+</dd>
+<dt class="field-even">Parameters</dt>
+<dd class="field-even"><p><strong>message</strong> (<em>ResponseType</em>) – </p>
+</dd>
+<dt class="field-odd">Return type</dt>
+<dd class="field-odd"><p>None</p>
+</dd>
+</dl>
+</dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="client-side-interceptor">
+<h3>Client-Side Interceptor<a class="headerlink" href="#client-side-interceptor" title="Permalink to this headline">¶</a></h3>
+<dl class="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>
+<dd><p>Describes an RPC to be invoked.</p>
+<p>This is an EXPERIMENTAL API.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>method</strong> – The method name of the RPC.</p></li>
+<li><p><strong>timeout</strong> – An optional duration of time in seconds to allow for the RPC.</p></li>
+<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>
+</ul>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="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">interceptors</em>, <em class="sig-param">request</em>, <em class="sig-param">timeout</em>, <em class="sig-param">metadata</em>, <em class="sig-param">credentials</em>, <em class="sig-param">wait_for_ready</em>, <em class="sig-param">channel</em>, <em class="sig-param">method</em>, <em class="sig-param">request_serializer</em>, <em class="sig-param">response_deserializer</em>, <em class="sig-param">loop</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="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">callback</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="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="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="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="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="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="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="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>
+<dd><p>Describes the length of allowed time remaining for the RPC.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>A nonnegative float indicating the length of allowed time in seconds
+remaining for the RPC to complete before it is considered to have
+timed out, or None if no deadline was specified for the RPC.</p>
+</dd>
+<dt class="field-even">Return type</dt>
+<dd class="field-even"><p>Optional[float]</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="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>
+
+</dd></dl>
+
+<dl class="class">
+<dt id="grpc.experimental.aio.UnaryUnaryClientInterceptor">
+<em class="property">class </em><code class="sig-prename descclassname">grpc.experimental.aio.</code><code class="sig-name descname">UnaryUnaryClientInterceptor</code><a class="reference internal" href="_modules/grpc/experimental/aio/_interceptor.html#UnaryUnaryClientInterceptor"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.UnaryUnaryClientInterceptor" title="Permalink to this definition">¶</a></dt>
+<dd><p>Affords intercepting unary-unary invocations.</p>
+<dl class="method">
+<dt id="grpc.experimental.aio.UnaryUnaryClientInterceptor.intercept_unary_unary">
+<em class="property">abstract async </em><code class="sig-name descname">intercept_unary_unary</code><span class="sig-paren">(</span><em class="sig-param">continuation</em>, <em class="sig-param">client_call_details</em>, <em class="sig-param">request</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc/experimental/aio/_interceptor.html#UnaryUnaryClientInterceptor.intercept_unary_unary"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.UnaryUnaryClientInterceptor.intercept_unary_unary" title="Permalink to this definition">¶</a></dt>
+<dd><p>Intercepts a unary-unary invocation asynchronously.</p>
+<dl class="field-list simple">
+<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
+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
+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>
+<li><p><strong>request</strong> (<em>RequestType</em>) – The request value for the RPC.</p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p>An object with the RPC response.</p>
+</dd>
+<dt class="field-odd">Raises</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><a class="reference internal" href="#grpc.experimental.aio.AioRpcError" title="grpc.experimental.aio.AioRpcError"><strong>AioRpcError</strong></a> – Indicating that the RPC terminated with non-OK status.</p></li>
+<li><p><strong>asyncio.CancelledError</strong> – Indicating that the RPC was canceled.</p></li>
+</ul>
+</dd>
+<dt class="field-even">Return type</dt>
+<dd class="field-even"><p>Union[grpc.experimental.aio._call.UnaryUnaryCall, ResponseType]</p>
+</dd>
+</dl>
+</dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="multi-callable-interfaces">
+<h3>Multi-Callable Interfaces<a class="headerlink" href="#multi-callable-interfaces" title="Permalink to this headline">¶</a></h3>
+<dl class="class">
+<dt id="grpc.experimental.aio.UnaryUnaryMultiCallable">
+<em class="property">class </em><code class="sig-prename descclassname">grpc.experimental.aio.</code><code class="sig-name descname">UnaryUnaryMultiCallable</code><a class="reference internal" href="_modules/grpc/experimental/aio/_base_channel.html#UnaryUnaryMultiCallable"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.UnaryUnaryMultiCallable" title="Permalink to this definition">¶</a></dt>
+<dd><p>Enables asynchronous invocation of a unary-call RPC.</p>
+<dl class="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">request</em>, <em class="sig-param">*</em>, <em class="sig-param">timeout=None</em>, <em class="sig-param">metadata=()</em>, <em class="sig-param">credentials=None</em>, <em class="sig-param">wait_for_ready=None</em>, <em class="sig-param">compression=None</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>
+<dd class="field-odd"><ul class="simple">
+<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
+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>
+<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>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p>A UnaryUnaryCall object.</p>
+</dd>
+<dt class="field-odd">Raises</dt>
+<dd class="field-odd"><p><a class="reference internal" href="grpc.html#grpc.RpcError" title="grpc.RpcError"><strong>RpcError</strong></a> – Indicates that the RPC terminated with non-OK status. The
+    raised RpcError will also be a Call for the RPC affording the RPC’s
+    metadata, status code, and details.</p>
+</dd>
+<dt class="field-even">Return type</dt>
+<dd class="field-even"><p>grpc.experimental.aio._base_call.UnaryUnaryCall</p>
+</dd>
+</dl>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="class">
+<dt id="grpc.experimental.aio.UnaryStreamMultiCallable">
+<em class="property">class </em><code class="sig-prename descclassname">grpc.experimental.aio.</code><code class="sig-name descname">UnaryStreamMultiCallable</code><a class="reference internal" href="_modules/grpc/experimental/aio/_base_channel.html#UnaryStreamMultiCallable"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.UnaryStreamMultiCallable" title="Permalink to this definition">¶</a></dt>
+<dd><p>Enables asynchronous invocation of a server-streaming RPC.</p>
+<dl class="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">request</em>, <em class="sig-param">*</em>, <em class="sig-param">timeout=None</em>, <em class="sig-param">metadata=()</em>, <em class="sig-param">credentials=None</em>, <em class="sig-param">wait_for_ready=None</em>, <em class="sig-param">compression=None</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>
+<dd class="field-odd"><ul class="simple">
+<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
+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>
+<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>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p>A UnaryStreamCall object.</p>
+</dd>
+<dt class="field-odd">Raises</dt>
+<dd class="field-odd"><p><a class="reference internal" href="grpc.html#grpc.RpcError" title="grpc.RpcError"><strong>RpcError</strong></a> – Indicates that the RPC terminated with non-OK status. The
+    raised RpcError will also be a Call for the RPC affording the RPC’s
+    metadata, status code, and details.</p>
+</dd>
+<dt class="field-even">Return type</dt>
+<dd class="field-even"><p>grpc.experimental.aio._base_call.UnaryStreamCall</p>
+</dd>
+</dl>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="class">
+<dt id="grpc.experimental.aio.StreamUnaryMultiCallable">
+<em class="property">class </em><code class="sig-prename descclassname">grpc.experimental.aio.</code><code class="sig-name descname">StreamUnaryMultiCallable</code><a class="reference internal" href="_modules/grpc/experimental/aio/_base_channel.html#StreamUnaryMultiCallable"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.StreamUnaryMultiCallable" title="Permalink to this definition">¶</a></dt>
+<dd><p>Enables asynchronous invocation of a client-streaming RPC.</p>
+<dl class="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">request_async_iterator=None</em>, <em class="sig-param">timeout=None</em>, <em class="sig-param">metadata=()</em>, <em class="sig-param">credentials=None</em>, <em class="sig-param">wait_for_ready=None</em>, <em class="sig-param">compression=None</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</strong> – 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
+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>
+<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>
+<li><p><strong>request_async_iterator</strong> (<em>Optional</em><em>[</em><em>AsyncIterable</em><em>[</em><em>Any</em><em>]</em><em>]</em>) – </p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p>A StreamUnaryCall object.</p>
+</dd>
+<dt class="field-odd">Raises</dt>
+<dd class="field-odd"><p><a class="reference internal" href="grpc.html#grpc.RpcError" title="grpc.RpcError"><strong>RpcError</strong></a> – Indicates that the RPC terminated with non-OK status. The
+    raised RpcError will also be a Call for the RPC affording the RPC’s
+    metadata, status code, and details.</p>
+</dd>
+<dt class="field-even">Return type</dt>
+<dd class="field-even"><p>grpc.experimental.aio._base_call.StreamUnaryCall</p>
+</dd>
+</dl>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="class">
+<dt id="grpc.experimental.aio.StreamStreamMultiCallable">
+<em class="property">class </em><code class="sig-prename descclassname">grpc.experimental.aio.</code><code class="sig-name descname">StreamStreamMultiCallable</code><a class="reference internal" href="_modules/grpc/experimental/aio/_base_channel.html#StreamStreamMultiCallable"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc.experimental.aio.StreamStreamMultiCallable" title="Permalink to this definition">¶</a></dt>
+<dd><p>Enables asynchronous invocation of a bidirectional-streaming RPC.</p>
+<dl class="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">request_async_iterator=None</em>, <em class="sig-param">timeout=None</em>, <em class="sig-param">metadata=()</em>, <em class="sig-param">credentials=None</em>, <em class="sig-param">wait_for_ready=None</em>, <em class="sig-param">compression=None</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</strong> – 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
+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>
+<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>
+<li><p><strong>request_async_iterator</strong> (<em>Optional</em><em>[</em><em>AsyncIterable</em><em>[</em><em>Any</em><em>]</em><em>]</em>) – </p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p>A StreamStreamCall object.</p>
+</dd>
+<dt class="field-odd">Raises</dt>
+<dd class="field-odd"><p><a class="reference internal" href="grpc.html#grpc.RpcError" title="grpc.RpcError"><strong>RpcError</strong></a> – Indicates that the RPC terminated with non-OK status. The
+    raised RpcError will also be a Call for the RPC affording the RPC’s
+    metadata, status code, and details.</p>
+</dd>
+<dt class="field-even">Return type</dt>
+<dd class="field-even"><p>grpc.experimental.aio._base_call.StreamStreamCall</p>
+</dd>
+</dl>
+</dd></dl>
+
+</dd></dl>
+
+</div>
+</div>
+</div>
+
+
+          </div>
+          
+        </div>
+      </div>
+    <div class="clearer"></div>
+  </div>
+    <div class="footer">
+      &copy;2018, The gRPC Authors.
+      
+      |
+      <a href="_sources/grpc_asyncio.rst.txt"
+          rel="nofollow">Page source</a>
+    </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>

+ 65 - 28
python/grpc_channelz.html

@@ -1,23 +1,21 @@
 
 
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!DOCTYPE html>
 
 
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
   <head>
   <head>
-    <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-    <title>gRPC Channelz &#8212; gRPC Python 1.26.0 documentation</title>
+    <meta charset="utf-8" />
+    <title>gRPC Channelz &#8212; gRPC Python 1.28.1 documentation</title>
     <link rel="stylesheet" href="_static/alabaster.css" type="text/css" />
     <link rel="stylesheet" href="_static/alabaster.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
-    <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
-    <script type="text/javascript" src="_static/jquery.js"></script>
-    <script type="text/javascript" src="_static/underscore.js"></script>
-    <script type="text/javascript" src="_static/doctools.js"></script>
-    <script type="text/javascript" src="_static/language_data.js"></script>
+    <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="index" title="Index" href="genindex.html" />
     <link rel="search" title="Search" href="search.html" />
     <link rel="search" title="Search" href="search.html" />
     <link rel="next" title="gRPC Health Checking" href="grpc_health_checking.html" />
     <link rel="next" title="gRPC Health Checking" href="grpc_health_checking.html" />
-    <link rel="prev" title="gRPC" href="grpc.html" />
+    <link rel="prev" title="gRPC AsyncIO API" href="grpc_asyncio.html" />
    
    
   <link rel="stylesheet" href="_static/custom.css" type="text/css" />
   <link rel="stylesheet" href="_static/custom.css" type="text/css" />
   
   
@@ -33,7 +31,7 @@
 
 
 
 
 
 
-<p class="blurb">1.26.0</p>
+<p class="blurb">1.28.1</p>
 
 
 
 
 
 
@@ -44,6 +42,7 @@
 <p class="caption"><span class="caption-text">Contents:</span></p>
 <p class="caption"><span class="caption-text">Contents:</span></p>
 <ul class="current">
 <ul class="current">
 <li class="toctree-l1"><a class="reference internal" href="grpc.html">gRPC</a></li>
 <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 current"><a class="current reference internal" href="#">gRPC Channelz</a><ul>
 <li class="toctree-l1 current"><a class="current reference internal" href="#">gRPC Channelz</a><ul>
 <li class="toctree-l2"><a class="reference internal" href="#what-is-grpc-channelz">What is gRPC Channelz?</a></li>
 <li class="toctree-l2"><a class="reference internal" href="#what-is-grpc-channelz">What is gRPC Channelz?</a></li>
 <li class="toctree-l2"><a class="reference internal" href="#module-grpc_channelz.v1.channelz">Module Contents</a></li>
 <li class="toctree-l2"><a class="reference internal" href="#module-grpc_channelz.v1.channelz">Module Contents</a></li>
@@ -60,23 +59,21 @@
 <h3>Related Topics</h3>
 <h3>Related Topics</h3>
 <ul>
 <ul>
   <li><a href="index.html">Documentation overview</a><ul>
   <li><a href="index.html">Documentation overview</a><ul>
-      <li>Previous: <a href="grpc.html" title="previous chapter">gRPC</a></li>
+      <li>Previous: <a href="grpc_asyncio.html" title="previous chapter">gRPC AsyncIO API</a></li>
       <li>Next: <a href="grpc_health_checking.html" title="next chapter">gRPC Health Checking</a></li>
       <li>Next: <a href="grpc_health_checking.html" title="next chapter">gRPC Health Checking</a></li>
   </ul></li>
   </ul></li>
 </ul>
 </ul>
 </div>
 </div>
 <div id="searchbox" style="display: none" role="search">
 <div id="searchbox" style="display: none" role="search">
-  <h3>Quick search</h3>
+  <h3 id="searchlabel">Quick search</h3>
     <div class="searchformwrapper">
     <div class="searchformwrapper">
     <form class="search" action="search.html" method="get">
     <form class="search" action="search.html" method="get">
-      <input type="text" name="q" />
+      <input type="text" name="q" aria-labelledby="searchlabel" />
       <input type="submit" value="Go" />
       <input type="submit" value="Go" />
-      <input type="hidden" name="check_keywords" value="yes" />
-      <input type="hidden" name="area" value="default" />
     </form>
     </form>
     </div>
     </div>
 </div>
 </div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
+<script>$('#searchbox').show(0);</script>
 
 
 
 
 
 
@@ -104,13 +101,56 @@
 <p>Channelz debug service implementation in gRPC Python.</p>
 <p>Channelz debug service implementation in gRPC Python.</p>
 <dl class="class">
 <dl class="class">
 <dt id="grpc_channelz.v1.channelz.ChannelzServicer">
 <dt id="grpc_channelz.v1.channelz.ChannelzServicer">
-<em class="property">class </em><code class="descclassname">grpc_channelz.v1.channelz.</code><code class="descname">ChannelzServicer</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><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/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>
 <dd><p>Servicer handling RPCs for service statuses.</p>
 <dd><p>Servicer handling RPCs for service statuses.</p>
+<dl class="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">request</em>, <em class="sig-param">context</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>
+<dd><p>Returns a single Channel, or else a NOT_FOUND code.</p>
+</dd></dl>
+
+<dl class="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">request</em>, <em class="sig-param">context</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>
+<dd><p>Returns a single Server, or else a NOT_FOUND code.</p>
+</dd></dl>
+
+<dl class="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">request</em>, <em class="sig-param">context</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>
+<dd><p>Gets all server sockets that exist in the process.</p>
+</dd></dl>
+
+<dl class="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">request</em>, <em class="sig-param">context</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>
+<dd><p>Gets all servers that exist in the process.</p>
+</dd></dl>
+
+<dl class="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">request</em>, <em class="sig-param">context</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>
+<dd><p>Returns a single Socket or else a NOT_FOUND code.</p>
+</dd></dl>
+
+<dl class="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">request</em>, <em class="sig-param">context</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>
+<dd><p>Returns a single Subchannel, or else a NOT_FOUND code.</p>
+</dd></dl>
+
+<dl class="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">request</em>, <em class="sig-param">context</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>
+<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>
+
 </dd></dl>
 </dd></dl>
 
 
 <dl class="function">
 <dl class="function">
 <dt id="grpc_channelz.v1.channelz.add_channelz_servicer">
 <dt id="grpc_channelz.v1.channelz.add_channelz_servicer">
-<code class="descclassname">grpc_channelz.v1.channelz.</code><code class="descname">add_channelz_servicer</code><span class="sig-paren">(</span><em>server</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>
+<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">server</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. Channelz servicer is in charge of
 pulling information from C-Core for entire process. It will allow the
 pulling information from C-Core for entire process. It will allow the
 server to response to Channelz queries.</p>
 server to response to Channelz queries.</p>
@@ -121,14 +161,11 @@ and you can add Channelz servicer to a Channelz-disabled server.</p>
 <p>The Channelz statistic can be enabled or disabled by channel option
 <p>The Channelz statistic can be enabled or disabled by channel option
 ‘grpc.enable_channelz’. Set to 1 to enable, set to 0 to disable.</p>
 ‘grpc.enable_channelz’. Set to 1 to enable, set to 0 to disable.</p>
 <p>This is an EXPERIMENTAL API.</p>
 <p>This is an EXPERIMENTAL API.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>server</strong> – grpc.Server to which Channelz service will be added.</td>
-</tr>
-</tbody>
-</table>
+<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>
+</dl>
 </dd></dl>
 </dd></dl>
 
 
 </div>
 </div>

+ 49 - 31
python/grpc_health_checking.html

@@ -1,19 +1,17 @@
 
 
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!DOCTYPE html>
 
 
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
   <head>
   <head>
-    <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-    <title>gRPC Health Checking &#8212; gRPC Python 1.26.0 documentation</title>
+    <meta charset="utf-8" />
+    <title>gRPC Health Checking &#8212; gRPC Python 1.28.1 documentation</title>
     <link rel="stylesheet" href="_static/alabaster.css" type="text/css" />
     <link rel="stylesheet" href="_static/alabaster.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
-    <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
-    <script type="text/javascript" src="_static/jquery.js"></script>
-    <script type="text/javascript" src="_static/underscore.js"></script>
-    <script type="text/javascript" src="_static/doctools.js"></script>
-    <script type="text/javascript" src="_static/language_data.js"></script>
+    <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="index" title="Index" href="genindex.html" />
     <link rel="search" title="Search" href="search.html" />
     <link rel="search" title="Search" href="search.html" />
     <link rel="next" title="gRPC Reflection" href="grpc_reflection.html" />
     <link rel="next" title="gRPC Reflection" href="grpc_reflection.html" />
@@ -33,7 +31,7 @@
 
 
 
 
 
 
-<p class="blurb">1.26.0</p>
+<p class="blurb">1.28.1</p>
 
 
 
 
 
 
@@ -44,6 +42,7 @@
 <p class="caption"><span class="caption-text">Contents:</span></p>
 <p class="caption"><span class="caption-text">Contents:</span></p>
 <ul class="current">
 <ul class="current">
 <li class="toctree-l1"><a class="reference internal" href="grpc.html">gRPC</a></li>
 <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_channelz.html">gRPC Channelz</a></li>
 <li class="toctree-l1 current"><a class="current reference internal" href="#">gRPC Health Checking</a><ul>
 <li class="toctree-l1 current"><a class="current reference internal" href="#">gRPC Health Checking</a><ul>
 <li class="toctree-l2"><a class="reference internal" href="#module-contents">Module Contents</a></li>
 <li class="toctree-l2"><a class="reference internal" href="#module-contents">Module Contents</a></li>
@@ -65,17 +64,15 @@
 </ul>
 </ul>
 </div>
 </div>
 <div id="searchbox" style="display: none" role="search">
 <div id="searchbox" style="display: none" role="search">
-  <h3>Quick search</h3>
+  <h3 id="searchlabel">Quick search</h3>
     <div class="searchformwrapper">
     <div class="searchformwrapper">
     <form class="search" action="search.html" method="get">
     <form class="search" action="search.html" method="get">
-      <input type="text" name="q" />
+      <input type="text" name="q" aria-labelledby="searchlabel" />
       <input type="submit" value="Go" />
       <input type="submit" value="Go" />
-      <input type="hidden" name="check_keywords" value="yes" />
-      <input type="hidden" name="area" value="default" />
     </form>
     </form>
     </div>
     </div>
 </div>
 </div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
+<script>$('#searchbox').show(0);</script>
 
 
 
 
 
 
@@ -98,11 +95,36 @@
 <h2>Module Contents<a class="headerlink" href="#module-contents" title="Permalink to this headline">¶</a></h2>
 <h2>Module Contents<a class="headerlink" href="#module-contents" title="Permalink to this headline">¶</a></h2>
 <dl class="class">
 <dl class="class">
 <dt id="grpc_health.v1.health.HealthServicer">
 <dt id="grpc_health.v1.health.HealthServicer">
-<em class="property">class </em><code class="descclassname">grpc_health.v1.health.</code><code class="descname">HealthServicer</code><span class="sig-paren">(</span><em>experimental_non_blocking=True</em>, <em>experimental_thread_pool=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc_health/v1/health.html#HealthServicer"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc_health.v1.health.HealthServicer" title="Permalink to this definition">¶</a></dt>
+<em class="property">class </em><code class="sig-prename descclassname">grpc_health.v1.health.</code><code class="sig-name descname">HealthServicer</code><span class="sig-paren">(</span><em class="sig-param">experimental_non_blocking=True</em>, <em class="sig-param">experimental_thread_pool=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc_health/v1/health.html#HealthServicer"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc_health.v1.health.HealthServicer" title="Permalink to this definition">¶</a></dt>
 <dd><p>Servicer handling RPCs for service statuses.</p>
 <dd><p>Servicer handling RPCs for service statuses.</p>
+<dl class="method">
+<dt id="grpc_health.v1.health.HealthServicer.Check">
+<code class="sig-name descname">Check</code><span class="sig-paren">(</span><em class="sig-param">request</em>, <em class="sig-param">context</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc_health/v1/health.html#HealthServicer.Check"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc_health.v1.health.HealthServicer.Check" title="Permalink to this definition">¶</a></dt>
+<dd><p>If the requested service is unknown, the call will fail with status
+NOT_FOUND.</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="grpc_health.v1.health.HealthServicer.Watch">
+<code class="sig-name descname">Watch</code><span class="sig-paren">(</span><em class="sig-param">request</em>, <em class="sig-param">context</em>, <em class="sig-param">send_response_callback=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc_health/v1/health.html#HealthServicer.Watch"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc_health.v1.health.HealthServicer.Watch" title="Permalink to this definition">¶</a></dt>
+<dd><p>Performs a watch for the serving status of the requested service.
+The server will immediately send back a message indicating the current
+serving status.  It will then subsequently send a new message whenever
+the service’s serving status changes.</p>
+<p>If the requested service is unknown when the call is received, the
+server will send a message setting the serving status to
+SERVICE_UNKNOWN but will <em>not</em> terminate the call.  If at some
+future point, the serving status of the service becomes known, the
+server will send a new message with the service’s serving status.</p>
+<p>If the call terminates with status UNIMPLEMENTED, then clients
+should assume this method is not supported and should not retry the
+call.  If the call terminates with any other status (including OK),
+clients should retry the call with appropriate exponential backoff.</p>
+</dd></dl>
+
 <dl class="method">
 <dl class="method">
 <dt id="grpc_health.v1.health.HealthServicer.enter_graceful_shutdown">
 <dt id="grpc_health.v1.health.HealthServicer.enter_graceful_shutdown">
-<code class="descname">enter_graceful_shutdown</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc_health/v1/health.html#HealthServicer.enter_graceful_shutdown"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc_health.v1.health.HealthServicer.enter_graceful_shutdown" title="Permalink to this definition">¶</a></dt>
+<code class="sig-name descname">enter_graceful_shutdown</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc_health/v1/health.html#HealthServicer.enter_graceful_shutdown"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc_health.v1.health.HealthServicer.enter_graceful_shutdown" title="Permalink to this definition">¶</a></dt>
 <dd><p>Permanently sets the status of all services to NOT_SERVING.</p>
 <dd><p>Permanently sets the status of all services to NOT_SERVING.</p>
 <p>This should be invoked when the server is entering a graceful shutdown
 <p>This should be invoked when the server is entering a graceful shutdown
 period. After this method is invoked, future attempts to set the status
 period. After this method is invoked, future attempts to set the status
@@ -112,21 +134,17 @@ of a service will be ignored.</p>
 
 
 <dl class="method">
 <dl class="method">
 <dt id="grpc_health.v1.health.HealthServicer.set">
 <dt id="grpc_health.v1.health.HealthServicer.set">
-<code class="descname">set</code><span class="sig-paren">(</span><em>service</em>, <em>status</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc_health/v1/health.html#HealthServicer.set"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc_health.v1.health.HealthServicer.set" title="Permalink to this definition">¶</a></dt>
+<code class="sig-name descname">set</code><span class="sig-paren">(</span><em class="sig-param">service</em>, <em class="sig-param">status</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc_health/v1/health.html#HealthServicer.set"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc_health.v1.health.HealthServicer.set" title="Permalink to this definition">¶</a></dt>
 <dd><p>Sets the status of a service.</p>
 <dd><p>Sets the status of a service.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
-<li><strong>service</strong> – string, the name of the service. NOTE, ‘’ must be set.</li>
-<li><strong>status</strong> – HealthCheckResponse.status enum value indicating the status of
-the service</li>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>service</strong> – string, the name of the service.</p></li>
+<li><p><strong>status</strong> – HealthCheckResponse.status enum value indicating the status of
+the service</p></li>
 </ul>
 </ul>
-</td>
-</tr>
-</tbody>
-</table>
+</dd>
+</dl>
 </dd></dl>
 </dd></dl>
 
 
 </dd></dl>
 </dd></dl>

+ 30 - 30
python/grpc_reflection.html

@@ -1,19 +1,17 @@
 
 
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!DOCTYPE html>
 
 
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
   <head>
   <head>
-    <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-    <title>gRPC Reflection &#8212; gRPC Python 1.26.0 documentation</title>
+    <meta charset="utf-8" />
+    <title>gRPC Reflection &#8212; gRPC Python 1.28.1 documentation</title>
     <link rel="stylesheet" href="_static/alabaster.css" type="text/css" />
     <link rel="stylesheet" href="_static/alabaster.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
-    <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
-    <script type="text/javascript" src="_static/jquery.js"></script>
-    <script type="text/javascript" src="_static/underscore.js"></script>
-    <script type="text/javascript" src="_static/doctools.js"></script>
-    <script type="text/javascript" src="_static/language_data.js"></script>
+    <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="index" title="Index" href="genindex.html" />
     <link rel="search" title="Search" href="search.html" />
     <link rel="search" title="Search" href="search.html" />
     <link rel="next" title="gRPC Status" href="grpc_status.html" />
     <link rel="next" title="gRPC Status" href="grpc_status.html" />
@@ -33,7 +31,7 @@
 
 
 
 
 
 
-<p class="blurb">1.26.0</p>
+<p class="blurb">1.28.1</p>
 
 
 
 
 
 
@@ -44,6 +42,7 @@
 <p class="caption"><span class="caption-text">Contents:</span></p>
 <p class="caption"><span class="caption-text">Contents:</span></p>
 <ul class="current">
 <ul class="current">
 <li class="toctree-l1"><a class="reference internal" href="grpc.html">gRPC</a></li>
 <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_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_health_checking.html">gRPC Health Checking</a></li>
 <li class="toctree-l1 current"><a class="current reference internal" href="#">gRPC Reflection</a><ul>
 <li class="toctree-l1 current"><a class="current reference internal" href="#">gRPC Reflection</a><ul>
@@ -67,17 +66,15 @@
 </ul>
 </ul>
 </div>
 </div>
 <div id="searchbox" style="display: none" role="search">
 <div id="searchbox" style="display: none" role="search">
-  <h3>Quick search</h3>
+  <h3 id="searchlabel">Quick search</h3>
     <div class="searchformwrapper">
     <div class="searchformwrapper">
     <form class="search" action="search.html" method="get">
     <form class="search" action="search.html" method="get">
-      <input type="text" name="q" />
+      <input type="text" name="q" aria-labelledby="searchlabel" />
       <input type="submit" value="Go" />
       <input type="submit" value="Go" />
-      <input type="hidden" name="check_keywords" value="yes" />
-      <input type="hidden" name="area" value="default" />
     </form>
     </form>
     </div>
     </div>
 </div>
 </div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
+<script>$('#searchbox').show(0);</script>
 
 
 
 
 
 
@@ -109,27 +106,30 @@
 <p>Reference implementation for reflection in gRPC Python.</p>
 <p>Reference implementation for reflection in gRPC Python.</p>
 <dl class="class">
 <dl class="class">
 <dt id="grpc_reflection.v1alpha.reflection.ReflectionServicer">
 <dt id="grpc_reflection.v1alpha.reflection.ReflectionServicer">
-<em class="property">class </em><code class="descclassname">grpc_reflection.v1alpha.reflection.</code><code class="descname">ReflectionServicer</code><span class="sig-paren">(</span><em>service_names</em>, <em>pool=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc_reflection/v1alpha/reflection.html#ReflectionServicer"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc_reflection.v1alpha.reflection.ReflectionServicer" title="Permalink to this definition">¶</a></dt>
+<em class="property">class </em><code class="sig-prename descclassname">grpc_reflection.v1alpha.reflection.</code><code class="sig-name descname">ReflectionServicer</code><span class="sig-paren">(</span><em class="sig-param">service_names</em>, <em class="sig-param">pool=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc_reflection/v1alpha/reflection.html#ReflectionServicer"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc_reflection.v1alpha.reflection.ReflectionServicer" title="Permalink to this definition">¶</a></dt>
 <dd><p>Servicer handling RPCs for service statuses.</p>
 <dd><p>Servicer handling RPCs for service statuses.</p>
+<dl class="method">
+<dt id="grpc_reflection.v1alpha.reflection.ReflectionServicer.ServerReflectionInfo">
+<code class="sig-name descname">ServerReflectionInfo</code><span class="sig-paren">(</span><em class="sig-param">request_iterator</em>, <em class="sig-param">context</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc_reflection/v1alpha/reflection.html#ReflectionServicer.ServerReflectionInfo"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc_reflection.v1alpha.reflection.ReflectionServicer.ServerReflectionInfo" title="Permalink to this definition">¶</a></dt>
+<dd><p>The reflection service is structured as a bidirectional stream, ensuring
+all related requests go to a single server.</p>
+</dd></dl>
+
 </dd></dl>
 </dd></dl>
 
 
 <dl class="function">
 <dl class="function">
 <dt id="grpc_reflection.v1alpha.reflection.enable_server_reflection">
 <dt id="grpc_reflection.v1alpha.reflection.enable_server_reflection">
-<code class="descclassname">grpc_reflection.v1alpha.reflection.</code><code class="descname">enable_server_reflection</code><span class="sig-paren">(</span><em>service_names</em>, <em>server</em>, <em>pool=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc_reflection/v1alpha/reflection.html#enable_server_reflection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc_reflection.v1alpha.reflection.enable_server_reflection" title="Permalink to this definition">¶</a></dt>
+<code class="sig-prename descclassname">grpc_reflection.v1alpha.reflection.</code><code class="sig-name descname">enable_server_reflection</code><span class="sig-paren">(</span><em class="sig-param">service_names</em>, <em class="sig-param">server</em>, <em class="sig-param">pool=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc_reflection/v1alpha/reflection.html#enable_server_reflection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc_reflection.v1alpha.reflection.enable_server_reflection" title="Permalink to this definition">¶</a></dt>
 <dd><p>Enables server reflection on a server.</p>
 <dd><p>Enables server reflection on a server.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
-<li><strong>service_names</strong> – Iterable of fully-qualified service names available.</li>
-<li><strong>server</strong> – grpc.Server to which reflection service will be added.</li>
-<li><strong>pool</strong> – DescriptorPool object to use (descriptor_pool.Default() if None).</li>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>service_names</strong> – Iterable of fully-qualified service names available.</p></li>
+<li><p><strong>server</strong> – grpc.Server to which reflection service will be added.</p></li>
+<li><p><strong>pool</strong> – DescriptorPool object to use (descriptor_pool.Default() if None).</p></li>
 </ul>
 </ul>
-</td>
-</tr>
-</tbody>
-</table>
+</dd>
+</dl>
 </dd></dl>
 </dd></dl>
 
 
 </div>
 </div>

+ 36 - 42
python/grpc_status.html

@@ -1,19 +1,17 @@
 
 
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!DOCTYPE html>
 
 
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
   <head>
   <head>
-    <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-    <title>gRPC Status &#8212; gRPC Python 1.26.0 documentation</title>
+    <meta charset="utf-8" />
+    <title>gRPC Status &#8212; gRPC Python 1.28.1 documentation</title>
     <link rel="stylesheet" href="_static/alabaster.css" type="text/css" />
     <link rel="stylesheet" href="_static/alabaster.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
-    <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
-    <script type="text/javascript" src="_static/jquery.js"></script>
-    <script type="text/javascript" src="_static/underscore.js"></script>
-    <script type="text/javascript" src="_static/doctools.js"></script>
-    <script type="text/javascript" src="_static/language_data.js"></script>
+    <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="index" title="Index" href="genindex.html" />
     <link rel="search" title="Search" href="search.html" />
     <link rel="search" title="Search" href="search.html" />
     <link rel="next" title="gRPC Testing" href="grpc_testing.html" />
     <link rel="next" title="gRPC Testing" href="grpc_testing.html" />
@@ -33,7 +31,7 @@
 
 
 
 
 
 
-<p class="blurb">1.26.0</p>
+<p class="blurb">1.28.1</p>
 
 
 
 
 
 
@@ -44,6 +42,7 @@
 <p class="caption"><span class="caption-text">Contents:</span></p>
 <p class="caption"><span class="caption-text">Contents:</span></p>
 <ul class="current">
 <ul class="current">
 <li class="toctree-l1"><a class="reference internal" href="grpc.html">gRPC</a></li>
 <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_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_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_reflection.html">gRPC Reflection</a></li>
@@ -65,17 +64,15 @@
 </ul>
 </ul>
 </div>
 </div>
 <div id="searchbox" style="display: none" role="search">
 <div id="searchbox" style="display: none" role="search">
-  <h3>Quick search</h3>
+  <h3 id="searchlabel">Quick search</h3>
     <div class="searchformwrapper">
     <div class="searchformwrapper">
     <form class="search" action="search.html" method="get">
     <form class="search" action="search.html" method="get">
-      <input type="text" name="q" />
+      <input type="text" name="q" aria-labelledby="searchlabel" />
       <input type="submit" value="Go" />
       <input type="submit" value="Go" />
-      <input type="hidden" name="check_keywords" value="yes" />
-      <input type="hidden" name="area" value="default" />
     </form>
     </form>
     </div>
     </div>
 </div>
 </div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
+<script>$('#searchbox').show(0);</script>
 
 
 
 
 
 
@@ -99,40 +96,37 @@
 <p>Reference implementation for status mapping in gRPC Python.</p>
 <p>Reference implementation for status mapping in gRPC Python.</p>
 <dl class="function">
 <dl class="function">
 <dt id="grpc_status.rpc_status.from_call">
 <dt id="grpc_status.rpc_status.from_call">
-<code class="descclassname">grpc_status.rpc_status.</code><code class="descname">from_call</code><span class="sig-paren">(</span><em>call</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc_status/rpc_status.html#from_call"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc_status.rpc_status.from_call" title="Permalink to this definition">¶</a></dt>
+<code class="sig-prename descclassname">grpc_status.rpc_status.</code><code class="sig-name descname">from_call</code><span class="sig-paren">(</span><em class="sig-param">call</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc_status/rpc_status.html#from_call"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc_status.rpc_status.from_call" title="Permalink to this definition">¶</a></dt>
 <dd><p>Returns a google.rpc.status.Status message corresponding to a given grpc.Call.</p>
 <dd><p>Returns a google.rpc.status.Status message corresponding to a given grpc.Call.</p>
 <p>This is an EXPERIMENTAL API.</p>
 <p>This is an EXPERIMENTAL API.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>call</strong> – A grpc.Call instance.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">A google.rpc.status.Status message representing the status of the RPC.</td>
-</tr>
-<tr class="field-odd field"><th class="field-name">Raises:</th><td class="field-body"><code class="xref py py-exc docutils literal notranslate"><span class="pre">ValueError</span></code> – If the gRPC call’s code or details are inconsistent with the
-status code and message inside of the google.rpc.status.Status.</td>
-</tr>
-</tbody>
-</table>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>call</strong> – A grpc.Call instance.</p>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p>A google.rpc.status.Status message representing the status of the RPC.</p>
+</dd>
+<dt class="field-odd">Raises</dt>
+<dd class="field-odd"><p><strong>ValueError</strong> – If the gRPC call’s code or details are inconsistent with the
+    status code and message inside of the google.rpc.status.Status.</p>
+</dd>
+</dl>
 </dd></dl>
 </dd></dl>
 
 
 <dl class="function">
 <dl class="function">
 <dt id="grpc_status.rpc_status.to_status">
 <dt id="grpc_status.rpc_status.to_status">
-<code class="descclassname">grpc_status.rpc_status.</code><code class="descname">to_status</code><span class="sig-paren">(</span><em>status</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc_status/rpc_status.html#to_status"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc_status.rpc_status.to_status" title="Permalink to this definition">¶</a></dt>
+<code class="sig-prename descclassname">grpc_status.rpc_status.</code><code class="sig-name descname">to_status</code><span class="sig-paren">(</span><em class="sig-param">status</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/grpc_status/rpc_status.html#to_status"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#grpc_status.rpc_status.to_status" title="Permalink to this definition">¶</a></dt>
 <dd><p>Convert a google.rpc.status.Status message to grpc.Status.</p>
 <dd><p>Convert a google.rpc.status.Status message to grpc.Status.</p>
 <p>This is an EXPERIMENTAL API.</p>
 <p>This is an EXPERIMENTAL API.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>status</strong> – a google.rpc.status.Status message representing the non-OK status
-to terminate the RPC with and communicate it to the client.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">A grpc.Status instance representing the input google.rpc.status.Status message.</td>
-</tr>
-</tbody>
-</table>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>status</strong> – a google.rpc.status.Status message representing the non-OK status
+to terminate the RPC with and communicate it to the client.</p>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p>A grpc.Status instance representing the input google.rpc.status.Status message.</p>
+</dd>
+</dl>
 </dd></dl>
 </dd></dl>
 
 
 </div>
 </div>

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 393 - 523
python/grpc_testing.html


+ 36 - 20
python/index.html

@@ -1,19 +1,17 @@
 
 
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!DOCTYPE html>
 
 
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
   <head>
   <head>
-    <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-    <title>Welcome to gRPC Python’s documentation! &#8212; gRPC Python 1.26.0 documentation</title>
+    <meta charset="utf-8" />
+    <title>Welcome to gRPC Python’s documentation! &#8212; gRPC Python 1.28.1 documentation</title>
     <link rel="stylesheet" href="_static/alabaster.css" type="text/css" />
     <link rel="stylesheet" href="_static/alabaster.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
-    <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
-    <script type="text/javascript" src="_static/jquery.js"></script>
-    <script type="text/javascript" src="_static/underscore.js"></script>
-    <script type="text/javascript" src="_static/doctools.js"></script>
-    <script type="text/javascript" src="_static/language_data.js"></script>
+    <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="index" title="Index" href="genindex.html" />
     <link rel="search" title="Search" href="search.html" />
     <link rel="search" title="Search" href="search.html" />
     <link rel="next" title="gRPC" href="grpc.html" />
     <link rel="next" title="gRPC" href="grpc.html" />
@@ -32,7 +30,7 @@
 
 
 
 
 
 
-<p class="blurb">1.26.0</p>
+<p class="blurb">1.28.1</p>
 
 
 
 
 
 
@@ -43,6 +41,7 @@
 <p class="caption"><span class="caption-text">Contents:</span></p>
 <p class="caption"><span class="caption-text">Contents:</span></p>
 <ul>
 <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.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_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_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_reflection.html">gRPC Reflection</a></li>
@@ -60,17 +59,15 @@
 </ul>
 </ul>
 </div>
 </div>
 <div id="searchbox" style="display: none" role="search">
 <div id="searchbox" style="display: none" role="search">
-  <h3>Quick search</h3>
+  <h3 id="searchlabel">Quick search</h3>
     <div class="searchformwrapper">
     <div class="searchformwrapper">
     <form class="search" action="search.html" method="get">
     <form class="search" action="search.html" method="get">
-      <input type="text" name="q" />
+      <input type="text" name="q" aria-labelledby="searchlabel" />
       <input type="submit" value="Go" />
       <input type="submit" value="Go" />
-      <input type="hidden" name="check_keywords" value="yes" />
-      <input type="hidden" name="area" value="default" />
     </form>
     </form>
     </div>
     </div>
 </div>
 </div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
+<script>$('#searchbox').show(0);</script>
 
 
 
 
 
 
@@ -89,7 +86,7 @@
             
             
   <div class="section" id="welcome-to-grpc-python-s-documentation">
   <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>
 <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.26.0 Release: 1.26.0</p>
+<p>Version: 1.28.1 Release: 1.28.1</p>
 </div>
 </div>
 <div class="section" id="api-reference">
 <div class="section" id="api-reference">
 <h1>API Reference<a class="headerlink" href="#api-reference" title="Permalink to this headline">¶</a></h1>
 <h1>API Reference<a class="headerlink" href="#api-reference" title="Permalink to this headline">¶</a></h1>
@@ -127,6 +124,25 @@
 </li>
 </li>
 </ul>
 </ul>
 </li>
 </li>
+<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#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>
+<li class="toctree-l3"><a class="reference internal" href="grpc_asyncio.html#server-object">Server Object</a></li>
+<li class="toctree-l3"><a class="reference internal" href="grpc_asyncio.html#grpc-exceptions">gRPC Exceptions</a></li>
+<li class="toctree-l3"><a class="reference internal" href="grpc_asyncio.html#shared-context">Shared Context</a></li>
+<li class="toctree-l3"><a class="reference internal" href="grpc_asyncio.html#client-side-context">Client-Side Context</a></li>
+<li class="toctree-l3"><a class="reference internal" href="grpc_asyncio.html#server-side-context">Server-Side Context</a></li>
+<li class="toctree-l3"><a class="reference internal" href="grpc_asyncio.html#client-side-interceptor">Client-Side Interceptor</a></li>
+<li class="toctree-l3"><a class="reference internal" href="grpc_asyncio.html#multi-callable-interfaces">Multi-Callable Interfaces</a></li>
+</ul>
+</li>
+</ul>
+</li>
 <li class="toctree-l1"><a class="reference internal" href="grpc_channelz.html">gRPC Channelz</a><ul>
 <li class="toctree-l1"><a class="reference internal" href="grpc_channelz.html">gRPC Channelz</a><ul>
 <li class="toctree-l2"><a class="reference internal" href="grpc_channelz.html#what-is-grpc-channelz">What is gRPC Channelz?</a></li>
 <li class="toctree-l2"><a class="reference internal" href="grpc_channelz.html#what-is-grpc-channelz">What is gRPC Channelz?</a></li>
 <li class="toctree-l2"><a class="reference internal" href="grpc_channelz.html#module-grpc_channelz.v1.channelz">Module Contents</a></li>
 <li class="toctree-l2"><a class="reference internal" href="grpc_channelz.html#module-grpc_channelz.v1.channelz">Module Contents</a></li>
@@ -157,9 +173,9 @@
 <div class="section" id="indices-and-tables">
 <div class="section" id="indices-and-tables">
 <h1>Indices and tables<a class="headerlink" href="#indices-and-tables" title="Permalink to this headline">¶</a></h1>
 <h1>Indices and tables<a class="headerlink" href="#indices-and-tables" title="Permalink to this headline">¶</a></h1>
 <ul class="simple">
 <ul class="simple">
-<li><a class="reference internal" href="genindex.html"><span class="std std-ref">Index</span></a></li>
-<li><a class="reference internal" href="py-modindex.html"><span class="std std-ref">Module Index</span></a></li>
-<li><a class="reference internal" href="search.html"><span class="std std-ref">Search Page</span></a></li>
+<li><p><a class="reference internal" href="genindex.html"><span class="std std-ref">Index</span></a></p></li>
+<li><p><a class="reference internal" href="py-modindex.html"><span class="std std-ref">Module Index</span></a></p></li>
+<li><p><a class="reference internal" href="search.html"><span class="std std-ref">Search Page</span></a></p></li>
 </ul>
 </ul>
 </div>
 </div>
 
 

BIN
python/objects.inv


+ 26 - 23
python/py-modindex.html

@@ -1,19 +1,17 @@
 
 
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!DOCTYPE html>
 
 
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
   <head>
   <head>
-    <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-    <title>Python Module Index &#8212; gRPC Python 1.26.0 documentation</title>
+    <meta charset="utf-8" />
+    <title>Python Module Index &#8212; gRPC Python 1.28.1 documentation</title>
     <link rel="stylesheet" href="_static/alabaster.css" type="text/css" />
     <link rel="stylesheet" href="_static/alabaster.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
-    <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
-    <script type="text/javascript" src="_static/jquery.js"></script>
-    <script type="text/javascript" src="_static/underscore.js"></script>
-    <script type="text/javascript" src="_static/doctools.js"></script>
-    <script type="text/javascript" src="_static/language_data.js"></script>
+    <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="index" title="Index" href="genindex.html" />
     <link rel="search" title="Search" href="search.html" />
     <link rel="search" title="Search" href="search.html" />
 
 
@@ -34,7 +32,7 @@
 
 
 
 
 
 
-<p class="blurb">1.26.0</p>
+<p class="blurb">1.28.1</p>
 
 
 
 
 
 
@@ -45,6 +43,7 @@
 <p class="caption"><span class="caption-text">Contents:</span></p>
 <p class="caption"><span class="caption-text">Contents:</span></p>
 <ul>
 <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.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_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_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_reflection.html">gRPC Reflection</a></li>
@@ -61,17 +60,15 @@
 </ul>
 </ul>
 </div>
 </div>
 <div id="searchbox" style="display: none" role="search">
 <div id="searchbox" style="display: none" role="search">
-  <h3>Quick search</h3>
+  <h3 id="searchlabel">Quick search</h3>
     <div class="searchformwrapper">
     <div class="searchformwrapper">
     <form class="search" action="search.html" method="get">
     <form class="search" action="search.html" method="get">
-      <input type="text" name="q" />
+      <input type="text" name="q" aria-labelledby="searchlabel" />
       <input type="submit" value="Go" />
       <input type="submit" value="Go" />
-      <input type="hidden" name="check_keywords" value="yes" />
-      <input type="hidden" name="area" value="default" />
     </form>
     </form>
     </div>
     </div>
 </div>
 </div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
+<script>$('#searchbox').show(0);</script>
 
 
 
 
 
 
@@ -100,39 +97,45 @@
      <tr class="cap" id="cap-g"><td></td><td>
      <tr class="cap" id="cap-g"><td></td><td>
        <strong>g</strong></td><td></td></tr>
        <strong>g</strong></td><td></td></tr>
      <tr>
      <tr>
-       <td></td>
+       <td><img src="_static/minus.png" class="toggler"
+              id="toggle-1" style="display: none" alt="-" /></td>
        <td>
        <td>
        <a href="grpc.html#module-grpc"><code class="xref">grpc</code></a></td><td>
        <a href="grpc.html#module-grpc"><code class="xref">grpc</code></a></td><td>
        <em></em></td></tr>
        <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="grpc_asyncio.html#module-grpc.experimental.aio"><code class="xref">grpc.experimental.aio</code></a></td><td>
+       <em></em></td></tr>
      <tr>
      <tr>
        <td><img src="_static/minus.png" class="toggler"
        <td><img src="_static/minus.png" class="toggler"
-              id="toggle-1" style="display: none" alt="-" /></td>
+              id="toggle-2" style="display: none" alt="-" /></td>
        <td>
        <td>
        <code class="xref">grpc_channelz</code></td><td>
        <code class="xref">grpc_channelz</code></td><td>
        <em></em></td></tr>
        <em></em></td></tr>
-     <tr class="cg-1">
+     <tr class="cg-2">
        <td></td>
        <td></td>
        <td>&#160;&#160;&#160;
        <td>&#160;&#160;&#160;
        <a href="grpc_channelz.html#module-grpc_channelz.v1.channelz"><code class="xref">grpc_channelz.v1.channelz</code></a></td><td>
        <a href="grpc_channelz.html#module-grpc_channelz.v1.channelz"><code class="xref">grpc_channelz.v1.channelz</code></a></td><td>
        <em></em></td></tr>
        <em></em></td></tr>
      <tr>
      <tr>
        <td><img src="_static/minus.png" class="toggler"
        <td><img src="_static/minus.png" class="toggler"
-              id="toggle-2" style="display: none" alt="-" /></td>
+              id="toggle-3" style="display: none" alt="-" /></td>
        <td>
        <td>
        <code class="xref">grpc_reflection</code></td><td>
        <code class="xref">grpc_reflection</code></td><td>
        <em></em></td></tr>
        <em></em></td></tr>
-     <tr class="cg-2">
+     <tr class="cg-3">
        <td></td>
        <td></td>
        <td>&#160;&#160;&#160;
        <td>&#160;&#160;&#160;
        <a href="grpc_reflection.html#module-grpc_reflection.v1alpha.reflection"><code class="xref">grpc_reflection.v1alpha.reflection</code></a></td><td>
        <a href="grpc_reflection.html#module-grpc_reflection.v1alpha.reflection"><code class="xref">grpc_reflection.v1alpha.reflection</code></a></td><td>
        <em></em></td></tr>
        <em></em></td></tr>
      <tr>
      <tr>
        <td><img src="_static/minus.png" class="toggler"
        <td><img src="_static/minus.png" class="toggler"
-              id="toggle-3" style="display: none" alt="-" /></td>
+              id="toggle-4" style="display: none" alt="-" /></td>
        <td>
        <td>
        <code class="xref">grpc_status</code></td><td>
        <code class="xref">grpc_status</code></td><td>
        <em></em></td></tr>
        <em></em></td></tr>
-     <tr class="cg-3">
+     <tr class="cg-4">
        <td></td>
        <td></td>
        <td>&#160;&#160;&#160;
        <td>&#160;&#160;&#160;
        <a href="grpc_status.html#module-grpc_status.rpc_status"><code class="xref">grpc_status.rpc_status</code></a></td><td>
        <a href="grpc_status.html#module-grpc_status.rpc_status"><code class="xref">grpc_status.rpc_status</code></a></td><td>

+ 14 - 19
python/search.html

@@ -1,28 +1,22 @@
 
 
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!DOCTYPE html>
 
 
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
   <head>
   <head>
-    <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-    <title>Search &#8212; gRPC Python 1.26.0 documentation</title>
+    <meta charset="utf-8" />
+    <title>Search &#8212; gRPC Python 1.28.1 documentation</title>
     <link rel="stylesheet" href="_static/alabaster.css" type="text/css" />
     <link rel="stylesheet" href="_static/alabaster.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
     
     
-    <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
-    <script type="text/javascript" src="_static/jquery.js"></script>
-    <script type="text/javascript" src="_static/underscore.js"></script>
-    <script type="text/javascript" src="_static/doctools.js"></script>
-    <script type="text/javascript" src="_static/language_data.js"></script>
-    <script type="text/javascript" src="_static/searchtools.js"></script>
+    <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>
+    <script src="_static/searchtools.js"></script>
     <link rel="index" title="Index" href="genindex.html" />
     <link rel="index" title="Index" href="genindex.html" />
     <link rel="search" title="Search" href="#" />
     <link rel="search" title="Search" href="#" />
-  <script type="text/javascript">
-    jQuery(function() { Search.loadIndex("searchindex.js"); });
-  </script>
-  
-  <script type="text/javascript" id="searchindexloader"></script>
+  <script src="searchindex.js" defer></script>
   
   
    
    
   <link rel="stylesheet" href="_static/custom.css" type="text/css" />
   <link rel="stylesheet" href="_static/custom.css" type="text/css" />
@@ -40,7 +34,7 @@
 
 
 
 
 
 
-<p class="blurb">1.26.0</p>
+<p class="blurb">1.28.1</p>
 
 
 
 
 
 
@@ -51,6 +45,7 @@
 <p class="caption"><span class="caption-text">Contents:</span></p>
 <p class="caption"><span class="caption-text">Contents:</span></p>
 <ul>
 <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.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_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_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_reflection.html">gRPC Reflection</a></li>
@@ -84,7 +79,7 @@
             
             
   <h1 id="search-documentation">Search</h1>
   <h1 id="search-documentation">Search</h1>
   <div id="fallback" class="admonition warning">
   <div id="fallback" class="admonition warning">
-  <script type="text/javascript">$('#fallback').hide();</script>
+  <script>$('#fallback').hide();</script>
   <p>
   <p>
     Please activate JavaScript to enable the search
     Please activate JavaScript to enable the search
     functionality.
     functionality.
@@ -97,7 +92,7 @@
     containing fewer words won't appear in the result list.
     containing fewer words won't appear in the result list.
   </p>
   </p>
   <form action="" method="get">
   <form action="" method="get">
-    <input type="text" name="q" value="" />
+    <input type="text" name="q" aria-labelledby="search-documentation" value="" />
     <input type="submit" value="search" />
     <input type="submit" value="search" />
     <span id="search-progress" style="padding-left: 10px"></span>
     <span id="search-progress" style="padding-left: 10px"></span>
   </form>
   </form>

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
python/searchindex.js


Daži faili netika attēloti, jo izmaiņu fails ir pārāk liels