grpc.html 194 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="utf-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>grpc &#8212; gRPC Python 1.36.1 documentation</title>
  7. <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
  8. <link rel="stylesheet" href="../_static/alabaster.css" type="text/css" />
  9. <script id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
  10. <script src="../_static/jquery.js"></script>
  11. <script src="../_static/underscore.js"></script>
  12. <script src="../_static/doctools.js"></script>
  13. <link rel="index" title="Index" href="../genindex.html" />
  14. <link rel="search" title="Search" href="../search.html" />
  15. <link rel="stylesheet" href="../_static/custom.css" type="text/css" />
  16. <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
  17. </head><body>
  18. <div class="document">
  19. <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
  20. <div class="sphinxsidebarwrapper">
  21. <h1 class="logo"><a href="../index.html">gRPC Python</a></h1>
  22. <p class="blurb">1.36.1</p>
  23. <h3>Navigation</h3>
  24. <p class="caption"><span class="caption-text">Contents:</span></p>
  25. <ul>
  26. <li class="toctree-l1"><a class="reference internal" href="../grpc.html">gRPC</a></li>
  27. <li class="toctree-l1"><a class="reference internal" href="../grpc_asyncio.html">gRPC AsyncIO API</a></li>
  28. <li class="toctree-l1"><a class="reference internal" href="../grpc_channelz.html">gRPC Channelz</a></li>
  29. <li class="toctree-l1"><a class="reference internal" href="../grpc_health_checking.html">gRPC Health Checking</a></li>
  30. <li class="toctree-l1"><a class="reference internal" href="../grpc_reflection.html">gRPC Reflection</a></li>
  31. <li class="toctree-l1"><a class="reference internal" href="../grpc_status.html">gRPC Status</a></li>
  32. <li class="toctree-l1"><a class="reference internal" href="../grpc_testing.html">gRPC Testing</a></li>
  33. <li class="toctree-l1"><a class="reference internal" href="../glossary.html">Glossary</a></li>
  34. </ul>
  35. <div class="relations">
  36. <h3>Related Topics</h3>
  37. <ul>
  38. <li><a href="../index.html">Documentation overview</a><ul>
  39. <li><a href="index.html">Module code</a><ul>
  40. </ul></li>
  41. </ul></li>
  42. </ul>
  43. </div>
  44. <div id="searchbox" style="display: none" role="search">
  45. <h3 id="searchlabel">Quick search</h3>
  46. <div class="searchformwrapper">
  47. <form class="search" action="../search.html" method="get">
  48. <input type="text" name="q" aria-labelledby="searchlabel" />
  49. <input type="submit" value="Go" />
  50. </form>
  51. </div>
  52. </div>
  53. <script>$('#searchbox').show(0);</script>
  54. </div>
  55. </div>
  56. <div class="documentwrapper">
  57. <div class="bodywrapper">
  58. <div class="body" role="main">
  59. <h1>Source code for grpc</h1><div class="highlight"><pre>
  60. <span></span><span class="c1"># Copyright 2015-2016 gRPC authors.</span>
  61. <span class="c1">#</span>
  62. <span class="c1"># Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span>
  63. <span class="c1"># you may not use this file except in compliance with the License.</span>
  64. <span class="c1"># You may obtain a copy of the License at</span>
  65. <span class="c1">#</span>
  66. <span class="c1"># http://www.apache.org/licenses/LICENSE-2.0</span>
  67. <span class="c1">#</span>
  68. <span class="c1"># Unless required by applicable law or agreed to in writing, software</span>
  69. <span class="c1"># distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span>
  70. <span class="c1"># WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
  71. <span class="c1"># See the License for the specific language governing permissions and</span>
  72. <span class="c1"># limitations under the License.</span>
  73. <span class="sd">&quot;&quot;&quot;gRPC&#39;s Python API.&quot;&quot;&quot;</span>
  74. <span class="kn">import</span> <span class="nn">abc</span>
  75. <span class="kn">import</span> <span class="nn">contextlib</span>
  76. <span class="kn">import</span> <span class="nn">enum</span>
  77. <span class="kn">import</span> <span class="nn">logging</span>
  78. <span class="kn">import</span> <span class="nn">sys</span>
  79. <span class="kn">import</span> <span class="nn">six</span>
  80. <span class="kn">from</span> <span class="nn">grpc._cython</span> <span class="kn">import</span> <span class="n">cygrpc</span> <span class="k">as</span> <span class="n">_cygrpc</span>
  81. <span class="kn">from</span> <span class="nn">grpc</span> <span class="kn">import</span> <span class="n">_compression</span>
  82. <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><span class="o">.</span><span class="n">addHandler</span><span class="p">(</span><span class="n">logging</span><span class="o">.</span><span class="n">NullHandler</span><span class="p">())</span>
  83. <span class="k">try</span><span class="p">:</span>
  84. <span class="kn">from</span> <span class="nn">grpc._grpcio_metadata</span> <span class="kn">import</span> <span class="n">__version__</span>
  85. <span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span>
  86. <span class="n">__version__</span> <span class="o">=</span> <span class="s2">&quot;dev0&quot;</span>
  87. <span class="c1">############################## Future Interface ###############################</span>
  88. <div class="viewcode-block" id="FutureTimeoutError"><a class="viewcode-back" href="../grpc.html#grpc.FutureTimeoutError">[docs]</a><span class="k">class</span> <span class="nc">FutureTimeoutError</span><span class="p">(</span><span class="ne">Exception</span><span class="p">):</span>
  89. <span class="sd">&quot;&quot;&quot;Indicates that a method call on a Future timed out.&quot;&quot;&quot;</span></div>
  90. <div class="viewcode-block" id="FutureCancelledError"><a class="viewcode-back" href="../grpc.html#grpc.FutureCancelledError">[docs]</a><span class="k">class</span> <span class="nc">FutureCancelledError</span><span class="p">(</span><span class="ne">Exception</span><span class="p">):</span>
  91. <span class="sd">&quot;&quot;&quot;Indicates that the computation underlying a Future was cancelled.&quot;&quot;&quot;</span></div>
  92. <div class="viewcode-block" id="Future"><a class="viewcode-back" href="../grpc.html#grpc.Future">[docs]</a><span class="k">class</span> <span class="nc">Future</span><span class="p">(</span><span class="n">six</span><span class="o">.</span><span class="n">with_metaclass</span><span class="p">(</span><span class="n">abc</span><span class="o">.</span><span class="n">ABCMeta</span><span class="p">)):</span>
  93. <span class="sd">&quot;&quot;&quot;A representation of a computation in another control flow.</span>
  94. <span class="sd"> Computations represented by a Future may be yet to be begun,</span>
  95. <span class="sd"> may be ongoing, or may have already completed.</span>
  96. <span class="sd"> &quot;&quot;&quot;</span>
  97. <div class="viewcode-block" id="Future.cancel"><a class="viewcode-back" href="../grpc.html#grpc.Future.cancel">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
  98. <span class="k">def</span> <span class="nf">cancel</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
  99. <span class="sd">&quot;&quot;&quot;Attempts to cancel the computation.</span>
  100. <span class="sd"> This method does not block.</span>
  101. <span class="sd"> Returns:</span>
  102. <span class="sd"> bool:</span>
  103. <span class="sd"> Returns True if the computation was canceled.</span>
  104. <span class="sd"> Returns False under all other circumstances, for example:</span>
  105. <span class="sd"> 1. computation has begun and could not be canceled.</span>
  106. <span class="sd"> 2. computation has finished</span>
  107. <span class="sd"> 3. computation is scheduled for execution and it is impossible</span>
  108. <span class="sd"> to determine its state without blocking.</span>
  109. <span class="sd"> &quot;&quot;&quot;</span>
  110. <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span></div>
  111. <div class="viewcode-block" id="Future.cancelled"><a class="viewcode-back" href="../grpc.html#grpc.Future.cancelled">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
  112. <span class="k">def</span> <span class="nf">cancelled</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
  113. <span class="sd">&quot;&quot;&quot;Describes whether the computation was cancelled.</span>
  114. <span class="sd"> This method does not block.</span>
  115. <span class="sd"> Returns:</span>
  116. <span class="sd"> bool:</span>
  117. <span class="sd"> Returns True if the computation was cancelled before its result became</span>
  118. <span class="sd"> available.</span>
  119. <span class="sd"> Returns False under all other circumstances, for example:</span>
  120. <span class="sd"> 1. computation was not cancelled.</span>
  121. <span class="sd"> 2. computation&#39;s result is available.</span>
  122. <span class="sd"> &quot;&quot;&quot;</span>
  123. <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span></div>
  124. <div class="viewcode-block" id="Future.running"><a class="viewcode-back" href="../grpc.html#grpc.Future.running">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
  125. <span class="k">def</span> <span class="nf">running</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
  126. <span class="sd">&quot;&quot;&quot;Describes whether the computation is taking place.</span>
  127. <span class="sd"> This method does not block.</span>
  128. <span class="sd"> Returns:</span>
  129. <span class="sd"> Returns True if the computation is scheduled for execution or</span>
  130. <span class="sd"> currently executing.</span>
  131. <span class="sd"> Returns False if the computation already executed or was cancelled.</span>
  132. <span class="sd"> &quot;&quot;&quot;</span>
  133. <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span></div>
  134. <div class="viewcode-block" id="Future.done"><a class="viewcode-back" href="../grpc.html#grpc.Future.done">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
  135. <span class="k">def</span> <span class="nf">done</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
  136. <span class="sd">&quot;&quot;&quot;Describes whether the computation has taken place.</span>
  137. <span class="sd"> This method does not block.</span>
  138. <span class="sd"> Returns:</span>
  139. <span class="sd"> bool:</span>
  140. <span class="sd"> Returns True if the computation already executed or was cancelled.</span>
  141. <span class="sd"> Returns False if the computation is scheduled for execution or</span>
  142. <span class="sd"> currently executing.</span>
  143. <span class="sd"> This is exactly opposite of the running() method&#39;s result.</span>
  144. <span class="sd"> &quot;&quot;&quot;</span>
  145. <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span></div>
  146. <div class="viewcode-block" id="Future.result"><a class="viewcode-back" href="../grpc.html#grpc.Future.result">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
  147. <span class="k">def</span> <span class="nf">result</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">timeout</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
  148. <span class="sd">&quot;&quot;&quot;Returns the result of the computation or raises its exception.</span>
  149. <span class="sd"> This method may return immediately or may block.</span>
  150. <span class="sd"> Args:</span>
  151. <span class="sd"> timeout: The length of time in seconds to wait for the computation to</span>
  152. <span class="sd"> finish or be cancelled. If None, the call will block until the</span>
  153. <span class="sd"> computations&#39;s termination.</span>
  154. <span class="sd"> Returns:</span>
  155. <span class="sd"> The return value of the computation.</span>
  156. <span class="sd"> Raises:</span>
  157. <span class="sd"> FutureTimeoutError: If a timeout value is passed and the computation</span>
  158. <span class="sd"> does not terminate within the allotted time.</span>
  159. <span class="sd"> FutureCancelledError: If the computation was cancelled.</span>
  160. <span class="sd"> Exception: If the computation raised an exception, this call will</span>
  161. <span class="sd"> raise the same exception.</span>
  162. <span class="sd"> &quot;&quot;&quot;</span>
  163. <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span></div>
  164. <div class="viewcode-block" id="Future.exception"><a class="viewcode-back" href="../grpc.html#grpc.Future.exception">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
  165. <span class="k">def</span> <span class="nf">exception</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">timeout</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
  166. <span class="sd">&quot;&quot;&quot;Return the exception raised by the computation.</span>
  167. <span class="sd"> This method may return immediately or may block.</span>
  168. <span class="sd"> Args:</span>
  169. <span class="sd"> timeout: The length of time in seconds to wait for the computation to</span>
  170. <span class="sd"> terminate or be cancelled. If None, the call will block until the</span>
  171. <span class="sd"> computations&#39;s termination.</span>
  172. <span class="sd"> Returns:</span>
  173. <span class="sd"> The exception raised by the computation, or None if the computation</span>
  174. <span class="sd"> did not raise an exception.</span>
  175. <span class="sd"> Raises:</span>
  176. <span class="sd"> FutureTimeoutError: If a timeout value is passed and the computation</span>
  177. <span class="sd"> does not terminate within the allotted time.</span>
  178. <span class="sd"> FutureCancelledError: If the computation was cancelled.</span>
  179. <span class="sd"> &quot;&quot;&quot;</span>
  180. <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span></div>
  181. <div class="viewcode-block" id="Future.traceback"><a class="viewcode-back" href="../grpc.html#grpc.Future.traceback">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
  182. <span class="k">def</span> <span class="nf">traceback</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">timeout</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
  183. <span class="sd">&quot;&quot;&quot;Access the traceback of the exception raised by the computation.</span>
  184. <span class="sd"> This method may return immediately or may block.</span>
  185. <span class="sd"> Args:</span>
  186. <span class="sd"> timeout: The length of time in seconds to wait for the computation</span>
  187. <span class="sd"> to terminate or be cancelled. If None, the call will block until</span>
  188. <span class="sd"> the computation&#39;s termination.</span>
  189. <span class="sd"> Returns:</span>
  190. <span class="sd"> The traceback of the exception raised by the computation, or None</span>
  191. <span class="sd"> if the computation did not raise an exception.</span>
  192. <span class="sd"> Raises:</span>
  193. <span class="sd"> FutureTimeoutError: If a timeout value is passed and the computation</span>
  194. <span class="sd"> does not terminate within the allotted time.</span>
  195. <span class="sd"> FutureCancelledError: If the computation was cancelled.</span>
  196. <span class="sd"> &quot;&quot;&quot;</span>
  197. <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span></div>
  198. <div class="viewcode-block" id="Future.add_done_callback"><a class="viewcode-back" href="../grpc.html#grpc.Future.add_done_callback">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
  199. <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">fn</span><span class="p">):</span>
  200. <span class="sd">&quot;&quot;&quot;Adds a function to be called at completion of the computation.</span>
  201. <span class="sd"> The callback will be passed this Future object describing the outcome</span>
  202. <span class="sd"> of the computation. Callbacks will be invoked after the future is</span>
  203. <span class="sd"> terminated, whether successfully or not.</span>
  204. <span class="sd"> If the computation has already completed, the callback will be called</span>
  205. <span class="sd"> immediately.</span>
  206. <span class="sd"> Exceptions raised in the callback will be logged at ERROR level, but</span>
  207. <span class="sd"> will not terminate any threads of execution.</span>
  208. <span class="sd"> Args:</span>
  209. <span class="sd"> fn: A callable taking this Future object as its single parameter.</span>
  210. <span class="sd"> &quot;&quot;&quot;</span>
  211. <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span></div></div>
  212. <span class="c1">################################ gRPC Enums ##################################</span>
  213. <div class="viewcode-block" id="ChannelConnectivity"><a class="viewcode-back" href="../grpc.html#grpc.ChannelConnectivity">[docs]</a><span class="nd">@enum</span><span class="o">.</span><span class="n">unique</span>
  214. <span class="k">class</span> <span class="nc">ChannelConnectivity</span><span class="p">(</span><span class="n">enum</span><span class="o">.</span><span class="n">Enum</span><span class="p">):</span>
  215. <span class="sd">&quot;&quot;&quot;Mirrors grpc_connectivity_state in the gRPC Core.</span>
  216. <span class="sd"> Attributes:</span>
  217. <span class="sd"> IDLE: The channel is idle.</span>
  218. <span class="sd"> CONNECTING: The channel is connecting.</span>
  219. <span class="sd"> READY: The channel is ready to conduct RPCs.</span>
  220. <span class="sd"> TRANSIENT_FAILURE: The channel has seen a failure from which it expects</span>
  221. <span class="sd"> to recover.</span>
  222. <span class="sd"> SHUTDOWN: The channel has seen a failure from which it cannot recover.</span>
  223. <span class="sd"> &quot;&quot;&quot;</span>
  224. <span class="n">IDLE</span> <span class="o">=</span> <span class="p">(</span><span class="n">_cygrpc</span><span class="o">.</span><span class="n">ConnectivityState</span><span class="o">.</span><span class="n">idle</span><span class="p">,</span> <span class="s1">&#39;idle&#39;</span><span class="p">)</span>
  225. <span class="n">CONNECTING</span> <span class="o">=</span> <span class="p">(</span><span class="n">_cygrpc</span><span class="o">.</span><span class="n">ConnectivityState</span><span class="o">.</span><span class="n">connecting</span><span class="p">,</span> <span class="s1">&#39;connecting&#39;</span><span class="p">)</span>
  226. <span class="n">READY</span> <span class="o">=</span> <span class="p">(</span><span class="n">_cygrpc</span><span class="o">.</span><span class="n">ConnectivityState</span><span class="o">.</span><span class="n">ready</span><span class="p">,</span> <span class="s1">&#39;ready&#39;</span><span class="p">)</span>
  227. <span class="n">TRANSIENT_FAILURE</span> <span class="o">=</span> <span class="p">(</span><span class="n">_cygrpc</span><span class="o">.</span><span class="n">ConnectivityState</span><span class="o">.</span><span class="n">transient_failure</span><span class="p">,</span>
  228. <span class="s1">&#39;transient failure&#39;</span><span class="p">)</span>
  229. <span class="n">SHUTDOWN</span> <span class="o">=</span> <span class="p">(</span><span class="n">_cygrpc</span><span class="o">.</span><span class="n">ConnectivityState</span><span class="o">.</span><span class="n">shutdown</span><span class="p">,</span> <span class="s1">&#39;shutdown&#39;</span><span class="p">)</span></div>
  230. <div class="viewcode-block" id="StatusCode"><a class="viewcode-back" href="../grpc.html#grpc.StatusCode">[docs]</a><span class="nd">@enum</span><span class="o">.</span><span class="n">unique</span>
  231. <span class="k">class</span> <span class="nc">StatusCode</span><span class="p">(</span><span class="n">enum</span><span class="o">.</span><span class="n">Enum</span><span class="p">):</span>
  232. <span class="sd">&quot;&quot;&quot;Mirrors grpc_status_code in the gRPC Core.</span>
  233. <span class="sd"> Attributes:</span>
  234. <span class="sd"> OK: Not an error; returned on success</span>
  235. <span class="sd"> CANCELLED: The operation was cancelled (typically by the caller).</span>
  236. <span class="sd"> UNKNOWN: Unknown error.</span>
  237. <span class="sd"> INVALID_ARGUMENT: Client specified an invalid argument.</span>
  238. <span class="sd"> DEADLINE_EXCEEDED: Deadline expired before operation could complete.</span>
  239. <span class="sd"> NOT_FOUND: Some requested entity (e.g., file or directory) was not found.</span>
  240. <span class="sd"> ALREADY_EXISTS: Some entity that we attempted to create (e.g., file or directory)</span>
  241. <span class="sd"> already exists.</span>
  242. <span class="sd"> PERMISSION_DENIED: The caller does not have permission to execute the specified</span>
  243. <span class="sd"> operation.</span>
  244. <span class="sd"> UNAUTHENTICATED: The request does not have valid authentication credentials for the</span>
  245. <span class="sd"> operation.</span>
  246. <span class="sd"> RESOURCE_EXHAUSTED: Some resource has been exhausted, perhaps a per-user quota, or</span>
  247. <span class="sd"> perhaps the entire file system is out of space.</span>
  248. <span class="sd"> FAILED_PRECONDITION: Operation was rejected because the system is not in a state</span>
  249. <span class="sd"> required for the operation&#39;s execution.</span>
  250. <span class="sd"> ABORTED: The operation was aborted, typically due to a concurrency issue</span>
  251. <span class="sd"> like sequencer check failures, transaction aborts, etc.</span>
  252. <span class="sd"> UNIMPLEMENTED: Operation is not implemented or not supported/enabled in this service.</span>
  253. <span class="sd"> INTERNAL: Internal errors. Means some invariants expected by underlying</span>
  254. <span class="sd"> system has been broken.</span>
  255. <span class="sd"> UNAVAILABLE: The service is currently unavailable.</span>
  256. <span class="sd"> DATA_LOSS: Unrecoverable data loss or corruption.</span>
  257. <span class="sd"> &quot;&quot;&quot;</span>
  258. <span class="n">OK</span> <span class="o">=</span> <span class="p">(</span><span class="n">_cygrpc</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="s1">&#39;ok&#39;</span><span class="p">)</span>
  259. <span class="n">CANCELLED</span> <span class="o">=</span> <span class="p">(</span><span class="n">_cygrpc</span><span class="o">.</span><span class="n">StatusCode</span><span class="o">.</span><span class="n">cancelled</span><span class="p">,</span> <span class="s1">&#39;cancelled&#39;</span><span class="p">)</span>
  260. <span class="n">UNKNOWN</span> <span class="o">=</span> <span class="p">(</span><span class="n">_cygrpc</span><span class="o">.</span><span class="n">StatusCode</span><span class="o">.</span><span class="n">unknown</span><span class="p">,</span> <span class="s1">&#39;unknown&#39;</span><span class="p">)</span>
  261. <span class="n">INVALID_ARGUMENT</span> <span class="o">=</span> <span class="p">(</span><span class="n">_cygrpc</span><span class="o">.</span><span class="n">StatusCode</span><span class="o">.</span><span class="n">invalid_argument</span><span class="p">,</span> <span class="s1">&#39;invalid argument&#39;</span><span class="p">)</span>
  262. <span class="n">DEADLINE_EXCEEDED</span> <span class="o">=</span> <span class="p">(</span><span class="n">_cygrpc</span><span class="o">.</span><span class="n">StatusCode</span><span class="o">.</span><span class="n">deadline_exceeded</span><span class="p">,</span>
  263. <span class="s1">&#39;deadline exceeded&#39;</span><span class="p">)</span>
  264. <span class="n">NOT_FOUND</span> <span class="o">=</span> <span class="p">(</span><span class="n">_cygrpc</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="s1">&#39;not found&#39;</span><span class="p">)</span>
  265. <span class="n">ALREADY_EXISTS</span> <span class="o">=</span> <span class="p">(</span><span class="n">_cygrpc</span><span class="o">.</span><span class="n">StatusCode</span><span class="o">.</span><span class="n">already_exists</span><span class="p">,</span> <span class="s1">&#39;already exists&#39;</span><span class="p">)</span>
  266. <span class="n">PERMISSION_DENIED</span> <span class="o">=</span> <span class="p">(</span><span class="n">_cygrpc</span><span class="o">.</span><span class="n">StatusCode</span><span class="o">.</span><span class="n">permission_denied</span><span class="p">,</span>
  267. <span class="s1">&#39;permission denied&#39;</span><span class="p">)</span>
  268. <span class="n">RESOURCE_EXHAUSTED</span> <span class="o">=</span> <span class="p">(</span><span class="n">_cygrpc</span><span class="o">.</span><span class="n">StatusCode</span><span class="o">.</span><span class="n">resource_exhausted</span><span class="p">,</span>
  269. <span class="s1">&#39;resource exhausted&#39;</span><span class="p">)</span>
  270. <span class="n">FAILED_PRECONDITION</span> <span class="o">=</span> <span class="p">(</span><span class="n">_cygrpc</span><span class="o">.</span><span class="n">StatusCode</span><span class="o">.</span><span class="n">failed_precondition</span><span class="p">,</span>
  271. <span class="s1">&#39;failed precondition&#39;</span><span class="p">)</span>
  272. <span class="n">ABORTED</span> <span class="o">=</span> <span class="p">(</span><span class="n">_cygrpc</span><span class="o">.</span><span class="n">StatusCode</span><span class="o">.</span><span class="n">aborted</span><span class="p">,</span> <span class="s1">&#39;aborted&#39;</span><span class="p">)</span>
  273. <span class="n">OUT_OF_RANGE</span> <span class="o">=</span> <span class="p">(</span><span class="n">_cygrpc</span><span class="o">.</span><span class="n">StatusCode</span><span class="o">.</span><span class="n">out_of_range</span><span class="p">,</span> <span class="s1">&#39;out of range&#39;</span><span class="p">)</span>
  274. <span class="n">UNIMPLEMENTED</span> <span class="o">=</span> <span class="p">(</span><span class="n">_cygrpc</span><span class="o">.</span><span class="n">StatusCode</span><span class="o">.</span><span class="n">unimplemented</span><span class="p">,</span> <span class="s1">&#39;unimplemented&#39;</span><span class="p">)</span>
  275. <span class="n">INTERNAL</span> <span class="o">=</span> <span class="p">(</span><span class="n">_cygrpc</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="s1">&#39;internal&#39;</span><span class="p">)</span>
  276. <span class="n">UNAVAILABLE</span> <span class="o">=</span> <span class="p">(</span><span class="n">_cygrpc</span><span class="o">.</span><span class="n">StatusCode</span><span class="o">.</span><span class="n">unavailable</span><span class="p">,</span> <span class="s1">&#39;unavailable&#39;</span><span class="p">)</span>
  277. <span class="n">DATA_LOSS</span> <span class="o">=</span> <span class="p">(</span><span class="n">_cygrpc</span><span class="o">.</span><span class="n">StatusCode</span><span class="o">.</span><span class="n">data_loss</span><span class="p">,</span> <span class="s1">&#39;data loss&#39;</span><span class="p">)</span>
  278. <span class="n">UNAUTHENTICATED</span> <span class="o">=</span> <span class="p">(</span><span class="n">_cygrpc</span><span class="o">.</span><span class="n">StatusCode</span><span class="o">.</span><span class="n">unauthenticated</span><span class="p">,</span> <span class="s1">&#39;unauthenticated&#39;</span><span class="p">)</span></div>
  279. <span class="c1">############################# gRPC Status ################################</span>
  280. <span class="k">class</span> <span class="nc">Status</span><span class="p">(</span><span class="n">six</span><span class="o">.</span><span class="n">with_metaclass</span><span class="p">(</span><span class="n">abc</span><span class="o">.</span><span class="n">ABCMeta</span><span class="p">)):</span>
  281. <span class="sd">&quot;&quot;&quot;Describes the status of an RPC.</span>
  282. <span class="sd"> This is an EXPERIMENTAL API.</span>
  283. <span class="sd"> Attributes:</span>
  284. <span class="sd"> code: A StatusCode object to be sent to the client.</span>
  285. <span class="sd"> details: A UTF-8-encodable string to be sent to the client upon</span>
  286. <span class="sd"> termination of the RPC.</span>
  287. <span class="sd"> trailing_metadata: The trailing :term:`metadata` in the RPC.</span>
  288. <span class="sd"> &quot;&quot;&quot;</span>
  289. <span class="c1">############################# gRPC Exceptions ################################</span>
  290. <div class="viewcode-block" id="RpcError"><a class="viewcode-back" href="../grpc.html#grpc.RpcError">[docs]</a><span class="k">class</span> <span class="nc">RpcError</span><span class="p">(</span><span class="ne">Exception</span><span class="p">):</span>
  291. <span class="sd">&quot;&quot;&quot;Raised by the gRPC library to indicate non-OK-status RPC termination.&quot;&quot;&quot;</span></div>
  292. <span class="c1">############################## Shared Context ################################</span>
  293. <div class="viewcode-block" id="RpcContext"><a class="viewcode-back" href="../grpc.html#grpc.RpcContext">[docs]</a><span class="k">class</span> <span class="nc">RpcContext</span><span class="p">(</span><span class="n">six</span><span class="o">.</span><span class="n">with_metaclass</span><span class="p">(</span><span class="n">abc</span><span class="o">.</span><span class="n">ABCMeta</span><span class="p">)):</span>
  294. <span class="sd">&quot;&quot;&quot;Provides RPC-related information and action.&quot;&quot;&quot;</span>
  295. <div class="viewcode-block" id="RpcContext.is_active"><a class="viewcode-back" href="../grpc.html#grpc.RpcContext.is_active">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
  296. <span class="k">def</span> <span class="nf">is_active</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
  297. <span class="sd">&quot;&quot;&quot;Describes whether the RPC is active or has terminated.</span>
  298. <span class="sd"> Returns:</span>
  299. <span class="sd"> bool:</span>
  300. <span class="sd"> True if RPC is active, False otherwise.</span>
  301. <span class="sd"> &quot;&quot;&quot;</span>
  302. <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span></div>
  303. <div class="viewcode-block" id="RpcContext.time_remaining"><a class="viewcode-back" href="../grpc.html#grpc.RpcContext.time_remaining">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
  304. <span class="k">def</span> <span class="nf">time_remaining</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
  305. <span class="sd">&quot;&quot;&quot;Describes the length of allowed time remaining for the RPC.</span>
  306. <span class="sd"> Returns:</span>
  307. <span class="sd"> A nonnegative float indicating the length of allowed time in seconds</span>
  308. <span class="sd"> remaining for the RPC to complete before it is considered to have</span>
  309. <span class="sd"> timed out, or None if no deadline was specified for the RPC.</span>
  310. <span class="sd"> &quot;&quot;&quot;</span>
  311. <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span></div>
  312. <div class="viewcode-block" id="RpcContext.cancel"><a class="viewcode-back" href="../grpc.html#grpc.RpcContext.cancel">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
  313. <span class="k">def</span> <span class="nf">cancel</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
  314. <span class="sd">&quot;&quot;&quot;Cancels the RPC.</span>
  315. <span class="sd"> Idempotent and has no effect if the RPC has already terminated.</span>
  316. <span class="sd"> &quot;&quot;&quot;</span>
  317. <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span></div>
  318. <div class="viewcode-block" id="RpcContext.add_callback"><a class="viewcode-back" href="../grpc.html#grpc.RpcContext.add_callback">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
  319. <span class="k">def</span> <span class="nf">add_callback</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">callback</span><span class="p">):</span>
  320. <span class="sd">&quot;&quot;&quot;Registers a callback to be called on RPC termination.</span>
  321. <span class="sd"> Args:</span>
  322. <span class="sd"> callback: A no-parameter callable to be called on RPC termination.</span>
  323. <span class="sd"> Returns:</span>
  324. <span class="sd"> True if the callback was added and will be called later; False if</span>
  325. <span class="sd"> the callback was not added and will not be called (because the RPC</span>
  326. <span class="sd"> already terminated or some other reason).</span>
  327. <span class="sd"> &quot;&quot;&quot;</span>
  328. <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span></div></div>
  329. <span class="c1">######################### Invocation-Side Context ############################</span>
  330. <div class="viewcode-block" id="Call"><a class="viewcode-back" href="../grpc.html#grpc.Call">[docs]</a><span class="k">class</span> <span class="nc">Call</span><span class="p">(</span><span class="n">six</span><span class="o">.</span><span class="n">with_metaclass</span><span class="p">(</span><span class="n">abc</span><span class="o">.</span><span class="n">ABCMeta</span><span class="p">,</span> <span class="n">RpcContext</span><span class="p">)):</span>
  331. <span class="sd">&quot;&quot;&quot;Invocation-side utility object for an RPC.&quot;&quot;&quot;</span>
  332. <div class="viewcode-block" id="Call.initial_metadata"><a class="viewcode-back" href="../grpc.html#grpc.Call.initial_metadata">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
  333. <span class="k">def</span> <span class="nf">initial_metadata</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
  334. <span class="sd">&quot;&quot;&quot;Accesses the initial metadata sent by the server.</span>
  335. <span class="sd"> This method blocks until the value is available.</span>
  336. <span class="sd"> Returns:</span>
  337. <span class="sd"> The initial :term:`metadata`.</span>
  338. <span class="sd"> &quot;&quot;&quot;</span>
  339. <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span></div>
  340. <div class="viewcode-block" id="Call.trailing_metadata"><a class="viewcode-back" href="../grpc.html#grpc.Call.trailing_metadata">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
  341. <span class="k">def</span> <span class="nf">trailing_metadata</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
  342. <span class="sd">&quot;&quot;&quot;Accesses the trailing metadata sent by the server.</span>
  343. <span class="sd"> This method blocks until the value is available.</span>
  344. <span class="sd"> Returns:</span>
  345. <span class="sd"> The trailing :term:`metadata`.</span>
  346. <span class="sd"> &quot;&quot;&quot;</span>
  347. <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span></div>
  348. <div class="viewcode-block" id="Call.code"><a class="viewcode-back" href="../grpc.html#grpc.Call.code">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
  349. <span class="k">def</span> <span class="nf">code</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
  350. <span class="sd">&quot;&quot;&quot;Accesses the status code sent by the server.</span>
  351. <span class="sd"> This method blocks until the value is available.</span>
  352. <span class="sd"> Returns:</span>
  353. <span class="sd"> The StatusCode value for the RPC.</span>
  354. <span class="sd"> &quot;&quot;&quot;</span>
  355. <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span></div>
  356. <div class="viewcode-block" id="Call.details"><a class="viewcode-back" href="../grpc.html#grpc.Call.details">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
  357. <span class="k">def</span> <span class="nf">details</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
  358. <span class="sd">&quot;&quot;&quot;Accesses the details sent by the server.</span>
  359. <span class="sd"> This method blocks until the value is available.</span>
  360. <span class="sd"> Returns:</span>
  361. <span class="sd"> The details string of the RPC.</span>
  362. <span class="sd"> &quot;&quot;&quot;</span>
  363. <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span></div></div>
  364. <span class="c1">############## Invocation-Side Interceptor Interfaces &amp; Classes ##############</span>
  365. <div class="viewcode-block" id="ClientCallDetails"><a class="viewcode-back" href="../grpc.html#grpc.ClientCallDetails">[docs]</a><span class="k">class</span> <span class="nc">ClientCallDetails</span><span class="p">(</span><span class="n">six</span><span class="o">.</span><span class="n">with_metaclass</span><span class="p">(</span><span class="n">abc</span><span class="o">.</span><span class="n">ABCMeta</span><span class="p">)):</span>
  366. <span class="sd">&quot;&quot;&quot;Describes an RPC to be invoked.</span>
  367. <span class="sd"> This is an EXPERIMENTAL API.</span>
  368. <span class="sd"> Attributes:</span>
  369. <span class="sd"> method: The method name of the RPC.</span>
  370. <span class="sd"> timeout: An optional duration of time in seconds to allow for the RPC.</span>
  371. <span class="sd"> metadata: Optional :term:`metadata` to be transmitted to</span>
  372. <span class="sd"> the service-side of the RPC.</span>
  373. <span class="sd"> credentials: An optional CallCredentials for the RPC.</span>
  374. <span class="sd"> wait_for_ready: This is an EXPERIMENTAL argument. An optional</span>
  375. <span class="sd"> flag to enable :term:`wait_for_ready` mechanism.</span>
  376. <span class="sd"> compression: An element of grpc.compression, e.g.</span>
  377. <span class="sd"> grpc.compression.Gzip. This is an EXPERIMENTAL option.</span>
  378. <span class="sd"> &quot;&quot;&quot;</span></div>
  379. <div class="viewcode-block" id="UnaryUnaryClientInterceptor"><a class="viewcode-back" href="../grpc.html#grpc.UnaryUnaryClientInterceptor">[docs]</a><span class="k">class</span> <span class="nc">UnaryUnaryClientInterceptor</span><span class="p">(</span><span class="n">six</span><span class="o">.</span><span class="n">with_metaclass</span><span class="p">(</span><span class="n">abc</span><span class="o">.</span><span class="n">ABCMeta</span><span class="p">)):</span>
  380. <span class="sd">&quot;&quot;&quot;Affords intercepting unary-unary invocations.</span>
  381. <span class="sd"> This is an EXPERIMENTAL API.</span>
  382. <span class="sd"> &quot;&quot;&quot;</span>
  383. <div class="viewcode-block" id="UnaryUnaryClientInterceptor.intercept_unary_unary"><a class="viewcode-back" href="../grpc.html#grpc.UnaryUnaryClientInterceptor.intercept_unary_unary">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
  384. <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">client_call_details</span><span class="p">,</span> <span class="n">request</span><span class="p">):</span>
  385. <span class="sd">&quot;&quot;&quot;Intercepts a unary-unary invocation asynchronously.</span>
  386. <span class="sd"> Args:</span>
  387. <span class="sd"> continuation: A function that proceeds with the invocation by</span>
  388. <span class="sd"> executing the next interceptor in chain or invoking the</span>
  389. <span class="sd"> actual RPC on the underlying Channel. It is the interceptor&#39;s</span>
  390. <span class="sd"> responsibility to call it if it decides to move the RPC forward.</span>
  391. <span class="sd"> The interceptor can use</span>
  392. <span class="sd"> `response_future = continuation(client_call_details, request)`</span>
  393. <span class="sd"> to continue with the RPC. `continuation` returns an object that is</span>
  394. <span class="sd"> both a Call for the RPC and a Future. In the event of RPC</span>
  395. <span class="sd"> completion, the return Call-Future&#39;s result value will be</span>
  396. <span class="sd"> the response message of the RPC. Should the event terminate</span>
  397. <span class="sd"> with non-OK status, the returned Call-Future&#39;s exception value</span>
  398. <span class="sd"> will be an RpcError.</span>
  399. <span class="sd"> client_call_details: A ClientCallDetails object describing the</span>
  400. <span class="sd"> outgoing RPC.</span>
  401. <span class="sd"> request: The request value for the RPC.</span>
  402. <span class="sd"> Returns:</span>
  403. <span class="sd"> An object that is both a Call for the RPC and a Future.</span>
  404. <span class="sd"> In the event of RPC completion, the return Call-Future&#39;s</span>
  405. <span class="sd"> result value will be the response message of the RPC.</span>
  406. <span class="sd"> Should the event terminate with non-OK status, the returned</span>
  407. <span class="sd"> Call-Future&#39;s exception value will be an RpcError.</span>
  408. <span class="sd"> &quot;&quot;&quot;</span>
  409. <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span></div></div>
  410. <div class="viewcode-block" id="UnaryStreamClientInterceptor"><a class="viewcode-back" href="../grpc.html#grpc.UnaryStreamClientInterceptor">[docs]</a><span class="k">class</span> <span class="nc">UnaryStreamClientInterceptor</span><span class="p">(</span><span class="n">six</span><span class="o">.</span><span class="n">with_metaclass</span><span class="p">(</span><span class="n">abc</span><span class="o">.</span><span class="n">ABCMeta</span><span class="p">)):</span>
  411. <span class="sd">&quot;&quot;&quot;Affords intercepting unary-stream invocations.</span>
  412. <span class="sd"> This is an EXPERIMENTAL API.</span>
  413. <span class="sd"> &quot;&quot;&quot;</span>
  414. <div class="viewcode-block" id="UnaryStreamClientInterceptor.intercept_unary_stream"><a class="viewcode-back" href="../grpc.html#grpc.UnaryStreamClientInterceptor.intercept_unary_stream">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
  415. <span class="k">def</span> <span class="nf">intercept_unary_stream</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">continuation</span><span class="p">,</span> <span class="n">client_call_details</span><span class="p">,</span>
  416. <span class="n">request</span><span class="p">):</span>
  417. <span class="sd">&quot;&quot;&quot;Intercepts a unary-stream invocation.</span>
  418. <span class="sd"> Args:</span>
  419. <span class="sd"> continuation: A function that proceeds with the invocation by</span>
  420. <span class="sd"> executing the next interceptor in chain or invoking the</span>
  421. <span class="sd"> actual RPC on the underlying Channel. It is the interceptor&#39;s</span>
  422. <span class="sd"> responsibility to call it if it decides to move the RPC forward.</span>
  423. <span class="sd"> The interceptor can use</span>
  424. <span class="sd"> `response_iterator = continuation(client_call_details, request)`</span>
  425. <span class="sd"> to continue with the RPC. `continuation` returns an object that is</span>
  426. <span class="sd"> both a Call for the RPC and an iterator for response values.</span>
  427. <span class="sd"> Drawing response values from the returned Call-iterator may</span>
  428. <span class="sd"> raise RpcError indicating termination of the RPC with non-OK</span>
  429. <span class="sd"> status.</span>
  430. <span class="sd"> client_call_details: A ClientCallDetails object describing the</span>
  431. <span class="sd"> outgoing RPC.</span>
  432. <span class="sd"> request: The request value for the RPC.</span>
  433. <span class="sd"> Returns:</span>
  434. <span class="sd"> An object that is both a Call for the RPC and an iterator of</span>
  435. <span class="sd"> response values. Drawing response values from the returned</span>
  436. <span class="sd"> Call-iterator may raise RpcError indicating termination of</span>
  437. <span class="sd"> the RPC with non-OK status.</span>
  438. <span class="sd"> &quot;&quot;&quot;</span>
  439. <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span></div></div>
  440. <div class="viewcode-block" id="StreamUnaryClientInterceptor"><a class="viewcode-back" href="../grpc.html#grpc.StreamUnaryClientInterceptor">[docs]</a><span class="k">class</span> <span class="nc">StreamUnaryClientInterceptor</span><span class="p">(</span><span class="n">six</span><span class="o">.</span><span class="n">with_metaclass</span><span class="p">(</span><span class="n">abc</span><span class="o">.</span><span class="n">ABCMeta</span><span class="p">)):</span>
  441. <span class="sd">&quot;&quot;&quot;Affords intercepting stream-unary invocations.</span>
  442. <span class="sd"> This is an EXPERIMENTAL API.</span>
  443. <span class="sd"> &quot;&quot;&quot;</span>
  444. <div class="viewcode-block" id="StreamUnaryClientInterceptor.intercept_stream_unary"><a class="viewcode-back" href="../grpc.html#grpc.StreamUnaryClientInterceptor.intercept_stream_unary">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
  445. <span class="k">def</span> <span class="nf">intercept_stream_unary</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">continuation</span><span class="p">,</span> <span class="n">client_call_details</span><span class="p">,</span>
  446. <span class="n">request_iterator</span><span class="p">):</span>
  447. <span class="sd">&quot;&quot;&quot;Intercepts a stream-unary invocation asynchronously.</span>
  448. <span class="sd"> Args:</span>
  449. <span class="sd"> continuation: A function that proceeds with the invocation by</span>
  450. <span class="sd"> executing the next interceptor in chain or invoking the</span>
  451. <span class="sd"> actual RPC on the underlying Channel. It is the interceptor&#39;s</span>
  452. <span class="sd"> responsibility to call it if it decides to move the RPC forward.</span>
  453. <span class="sd"> The interceptor can use</span>
  454. <span class="sd"> `response_future = continuation(client_call_details, request_iterator)`</span>
  455. <span class="sd"> to continue with the RPC. `continuation` returns an object that is</span>
  456. <span class="sd"> both a Call for the RPC and a Future. In the event of RPC completion,</span>
  457. <span class="sd"> the return Call-Future&#39;s result value will be the response message</span>
  458. <span class="sd"> of the RPC. Should the event terminate with non-OK status, the</span>
  459. <span class="sd"> returned Call-Future&#39;s exception value will be an RpcError.</span>
  460. <span class="sd"> client_call_details: A ClientCallDetails object describing the</span>
  461. <span class="sd"> outgoing RPC.</span>
  462. <span class="sd"> request_iterator: An iterator that yields request values for the RPC.</span>
  463. <span class="sd"> Returns:</span>
  464. <span class="sd"> An object that is both a Call for the RPC and a Future.</span>
  465. <span class="sd"> In the event of RPC completion, the return Call-Future&#39;s</span>
  466. <span class="sd"> result value will be the response message of the RPC.</span>
  467. <span class="sd"> Should the event terminate with non-OK status, the returned</span>
  468. <span class="sd"> Call-Future&#39;s exception value will be an RpcError.</span>
  469. <span class="sd"> &quot;&quot;&quot;</span>
  470. <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span></div></div>
  471. <div class="viewcode-block" id="StreamStreamClientInterceptor"><a class="viewcode-back" href="../grpc.html#grpc.StreamStreamClientInterceptor">[docs]</a><span class="k">class</span> <span class="nc">StreamStreamClientInterceptor</span><span class="p">(</span><span class="n">six</span><span class="o">.</span><span class="n">with_metaclass</span><span class="p">(</span><span class="n">abc</span><span class="o">.</span><span class="n">ABCMeta</span><span class="p">)):</span>
  472. <span class="sd">&quot;&quot;&quot;Affords intercepting stream-stream invocations.</span>
  473. <span class="sd"> This is an EXPERIMENTAL API.</span>
  474. <span class="sd"> &quot;&quot;&quot;</span>
  475. <div class="viewcode-block" id="StreamStreamClientInterceptor.intercept_stream_stream"><a class="viewcode-back" href="../grpc.html#grpc.StreamStreamClientInterceptor.intercept_stream_stream">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
  476. <span class="k">def</span> <span class="nf">intercept_stream_stream</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">continuation</span><span class="p">,</span> <span class="n">client_call_details</span><span class="p">,</span>
  477. <span class="n">request_iterator</span><span class="p">):</span>
  478. <span class="sd">&quot;&quot;&quot;Intercepts a stream-stream invocation.</span>
  479. <span class="sd"> Args:</span>
  480. <span class="sd"> continuation: A function that proceeds with the invocation by</span>
  481. <span class="sd"> executing the next interceptor in chain or invoking the</span>
  482. <span class="sd"> actual RPC on the underlying Channel. It is the interceptor&#39;s</span>
  483. <span class="sd"> responsibility to call it if it decides to move the RPC forward.</span>
  484. <span class="sd"> The interceptor can use</span>
  485. <span class="sd"> `response_iterator = continuation(client_call_details, request_iterator)`</span>
  486. <span class="sd"> to continue with the RPC. `continuation` returns an object that is</span>
  487. <span class="sd"> both a Call for the RPC and an iterator for response values.</span>
  488. <span class="sd"> Drawing response values from the returned Call-iterator may</span>
  489. <span class="sd"> raise RpcError indicating termination of the RPC with non-OK</span>
  490. <span class="sd"> status.</span>
  491. <span class="sd"> client_call_details: A ClientCallDetails object describing the</span>
  492. <span class="sd"> outgoing RPC.</span>
  493. <span class="sd"> request_iterator: An iterator that yields request values for the RPC.</span>
  494. <span class="sd"> Returns:</span>
  495. <span class="sd"> An object that is both a Call for the RPC and an iterator of</span>
  496. <span class="sd"> response values. Drawing response values from the returned</span>
  497. <span class="sd"> Call-iterator may raise RpcError indicating termination of</span>
  498. <span class="sd"> the RPC with non-OK status.</span>
  499. <span class="sd"> &quot;&quot;&quot;</span>
  500. <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span></div></div>
  501. <span class="c1">############ Authentication &amp; Authorization Interfaces &amp; Classes #############</span>
  502. <div class="viewcode-block" id="ChannelCredentials"><a class="viewcode-back" href="../grpc.html#grpc.ChannelCredentials">[docs]</a><span class="k">class</span> <span class="nc">ChannelCredentials</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
  503. <span class="sd">&quot;&quot;&quot;An encapsulation of the data required to create a secure Channel.</span>
  504. <span class="sd"> This class has no supported interface - it exists to define the type of its</span>
  505. <span class="sd"> instances and its instances exist to be passed to other functions. For</span>
  506. <span class="sd"> example, ssl_channel_credentials returns an instance of this class and</span>
  507. <span class="sd"> secure_channel requires an instance of this class.</span>
  508. <span class="sd"> &quot;&quot;&quot;</span>
  509. <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">credentials</span><span class="p">):</span>
  510. <span class="bp">self</span><span class="o">.</span><span class="n">_credentials</span> <span class="o">=</span> <span class="n">credentials</span></div>
  511. <div class="viewcode-block" id="CallCredentials"><a class="viewcode-back" href="../grpc.html#grpc.CallCredentials">[docs]</a><span class="k">class</span> <span class="nc">CallCredentials</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
  512. <span class="sd">&quot;&quot;&quot;An encapsulation of the data required to assert an identity over a call.</span>
  513. <span class="sd"> A CallCredentials has to be used with secure Channel, otherwise the</span>
  514. <span class="sd"> metadata will not be transmitted to the server.</span>
  515. <span class="sd"> A CallCredentials may be composed with ChannelCredentials to always assert</span>
  516. <span class="sd"> identity for every call over that Channel.</span>
  517. <span class="sd"> This class has no supported interface - it exists to define the type of its</span>
  518. <span class="sd"> instances and its instances exist to be passed to other functions.</span>
  519. <span class="sd"> &quot;&quot;&quot;</span>
  520. <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">credentials</span><span class="p">):</span>
  521. <span class="bp">self</span><span class="o">.</span><span class="n">_credentials</span> <span class="o">=</span> <span class="n">credentials</span></div>
  522. <div class="viewcode-block" id="AuthMetadataContext"><a class="viewcode-back" href="../grpc.html#grpc.AuthMetadataContext">[docs]</a><span class="k">class</span> <span class="nc">AuthMetadataContext</span><span class="p">(</span><span class="n">six</span><span class="o">.</span><span class="n">with_metaclass</span><span class="p">(</span><span class="n">abc</span><span class="o">.</span><span class="n">ABCMeta</span><span class="p">)):</span>
  523. <span class="sd">&quot;&quot;&quot;Provides information to call credentials metadata plugins.</span>
  524. <span class="sd"> Attributes:</span>
  525. <span class="sd"> service_url: A string URL of the service being called into.</span>
  526. <span class="sd"> method_name: A string of the fully qualified method name being called.</span>
  527. <span class="sd"> &quot;&quot;&quot;</span></div>
  528. <div class="viewcode-block" id="AuthMetadataPluginCallback"><a class="viewcode-back" href="../grpc.html#grpc.AuthMetadataPluginCallback">[docs]</a><span class="k">class</span> <span class="nc">AuthMetadataPluginCallback</span><span class="p">(</span><span class="n">six</span><span class="o">.</span><span class="n">with_metaclass</span><span class="p">(</span><span class="n">abc</span><span class="o">.</span><span class="n">ABCMeta</span><span class="p">)):</span>
  529. <span class="sd">&quot;&quot;&quot;Callback object received by a metadata plugin.&quot;&quot;&quot;</span>
  530. <div class="viewcode-block" id="AuthMetadataPluginCallback.__call__"><a class="viewcode-back" href="../grpc.html#grpc.AuthMetadataPluginCallback.__call__">[docs]</a> <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">metadata</span><span class="p">,</span> <span class="n">error</span><span class="p">):</span>
  531. <span class="sd">&quot;&quot;&quot;Passes to the gRPC runtime authentication metadata for an RPC.</span>
  532. <span class="sd"> Args:</span>
  533. <span class="sd"> metadata: The :term:`metadata` used to construct the CallCredentials.</span>
  534. <span class="sd"> error: An Exception to indicate error or None to indicate success.</span>
  535. <span class="sd"> &quot;&quot;&quot;</span>
  536. <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span></div></div>
  537. <div class="viewcode-block" id="AuthMetadataPlugin"><a class="viewcode-back" href="../grpc.html#grpc.AuthMetadataPlugin">[docs]</a><span class="k">class</span> <span class="nc">AuthMetadataPlugin</span><span class="p">(</span><span class="n">six</span><span class="o">.</span><span class="n">with_metaclass</span><span class="p">(</span><span class="n">abc</span><span class="o">.</span><span class="n">ABCMeta</span><span class="p">)):</span>
  538. <span class="sd">&quot;&quot;&quot;A specification for custom authentication.&quot;&quot;&quot;</span>
  539. <div class="viewcode-block" id="AuthMetadataPlugin.__call__"><a class="viewcode-back" href="../grpc.html#grpc.AuthMetadataPlugin.__call__">[docs]</a> <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">context</span><span class="p">,</span> <span class="n">callback</span><span class="p">):</span>
  540. <span class="sd">&quot;&quot;&quot;Implements authentication by passing metadata to a callback.</span>
  541. <span class="sd"> This method will be invoked asynchronously in a separate thread.</span>
  542. <span class="sd"> Args:</span>
  543. <span class="sd"> context: An AuthMetadataContext providing information on the RPC that</span>
  544. <span class="sd"> the plugin is being called to authenticate.</span>
  545. <span class="sd"> callback: An AuthMetadataPluginCallback to be invoked either</span>
  546. <span class="sd"> synchronously or asynchronously.</span>
  547. <span class="sd"> &quot;&quot;&quot;</span>
  548. <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span></div></div>
  549. <div class="viewcode-block" id="ServerCredentials"><a class="viewcode-back" href="../grpc.html#grpc.ServerCredentials">[docs]</a><span class="k">class</span> <span class="nc">ServerCredentials</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
  550. <span class="sd">&quot;&quot;&quot;An encapsulation of the data required to open a secure port on a Server.</span>
  551. <span class="sd"> This class has no supported interface - it exists to define the type of its</span>
  552. <span class="sd"> instances and its instances exist to be passed to other functions.</span>
  553. <span class="sd"> &quot;&quot;&quot;</span>
  554. <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">credentials</span><span class="p">):</span>
  555. <span class="bp">self</span><span class="o">.</span><span class="n">_credentials</span> <span class="o">=</span> <span class="n">credentials</span></div>
  556. <div class="viewcode-block" id="ServerCertificateConfiguration"><a class="viewcode-back" href="../grpc.html#grpc.ServerCertificateConfiguration">[docs]</a><span class="k">class</span> <span class="nc">ServerCertificateConfiguration</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
  557. <span class="sd">&quot;&quot;&quot;A certificate configuration for use with an SSL-enabled Server.</span>
  558. <span class="sd"> Instances of this class can be returned in the certificate configuration</span>
  559. <span class="sd"> fetching callback.</span>
  560. <span class="sd"> This class has no supported interface -- it exists to define the</span>
  561. <span class="sd"> type of its instances and its instances exist to be passed to</span>
  562. <span class="sd"> other functions.</span>
  563. <span class="sd"> &quot;&quot;&quot;</span>
  564. <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">certificate_configuration</span><span class="p">):</span>
  565. <span class="bp">self</span><span class="o">.</span><span class="n">_certificate_configuration</span> <span class="o">=</span> <span class="n">certificate_configuration</span></div>
  566. <span class="c1">######################## Multi-Callable Interfaces ###########################</span>
  567. <div class="viewcode-block" id="UnaryUnaryMultiCallable"><a class="viewcode-back" href="../grpc.html#grpc.UnaryUnaryMultiCallable">[docs]</a><span class="k">class</span> <span class="nc">UnaryUnaryMultiCallable</span><span class="p">(</span><span class="n">six</span><span class="o">.</span><span class="n">with_metaclass</span><span class="p">(</span><span class="n">abc</span><span class="o">.</span><span class="n">ABCMeta</span><span class="p">)):</span>
  568. <span class="sd">&quot;&quot;&quot;Affords invoking a unary-unary RPC from client-side.&quot;&quot;&quot;</span>
  569. <div class="viewcode-block" id="UnaryUnaryMultiCallable.__call__"><a class="viewcode-back" href="../grpc.html#grpc.UnaryUnaryMultiCallable.__call__">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
  570. <span class="k">def</span> <span class="fm">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
  571. <span class="n">request</span><span class="p">,</span>
  572. <span class="n">timeout</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
  573. <span class="n">metadata</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
  574. <span class="n">credentials</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
  575. <span class="n">wait_for_ready</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
  576. <span class="n">compression</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
  577. <span class="sd">&quot;&quot;&quot;Synchronously invokes the underlying RPC.</span>
  578. <span class="sd"> Args:</span>
  579. <span class="sd"> request: The request value for the RPC.</span>
  580. <span class="sd"> timeout: An optional duration of time in seconds to allow</span>
  581. <span class="sd"> for the RPC.</span>
  582. <span class="sd"> metadata: Optional :term:`metadata` to be transmitted to the</span>
  583. <span class="sd"> service-side of the RPC.</span>
  584. <span class="sd"> credentials: An optional CallCredentials for the RPC. Only valid for</span>
  585. <span class="sd"> secure Channel.</span>
  586. <span class="sd"> wait_for_ready: This is an EXPERIMENTAL argument. An optional</span>
  587. <span class="sd"> flag to enable :term:`wait_for_ready` mechanism.</span>
  588. <span class="sd"> compression: An element of grpc.compression, e.g.</span>
  589. <span class="sd"> grpc.compression.Gzip. This is an EXPERIMENTAL option.</span>
  590. <span class="sd"> Returns:</span>
  591. <span class="sd"> The response value for the RPC.</span>
  592. <span class="sd"> Raises:</span>
  593. <span class="sd"> RpcError: Indicating that the RPC terminated with non-OK status. The</span>
  594. <span class="sd"> raised RpcError will also be a Call for the RPC affording the RPC&#39;s</span>
  595. <span class="sd"> metadata, status code, and details.</span>
  596. <span class="sd"> &quot;&quot;&quot;</span>
  597. <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span></div>
  598. <div class="viewcode-block" id="UnaryUnaryMultiCallable.with_call"><a class="viewcode-back" href="../grpc.html#grpc.UnaryUnaryMultiCallable.with_call">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
  599. <span class="k">def</span> <span class="nf">with_call</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
  600. <span class="n">request</span><span class="p">,</span>
  601. <span class="n">timeout</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
  602. <span class="n">metadata</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
  603. <span class="n">credentials</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
  604. <span class="n">wait_for_ready</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
  605. <span class="n">compression</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
  606. <span class="sd">&quot;&quot;&quot;Synchronously invokes the underlying RPC.</span>
  607. <span class="sd"> Args:</span>
  608. <span class="sd"> request: The request value for the RPC.</span>
  609. <span class="sd"> timeout: An optional durating of time in seconds to allow for</span>
  610. <span class="sd"> the RPC.</span>
  611. <span class="sd"> metadata: Optional :term:`metadata` to be transmitted to the</span>
  612. <span class="sd"> service-side of the RPC.</span>
  613. <span class="sd"> credentials: An optional CallCredentials for the RPC. Only valid for</span>
  614. <span class="sd"> secure Channel.</span>
  615. <span class="sd"> wait_for_ready: This is an EXPERIMENTAL argument. An optional</span>
  616. <span class="sd"> flag to enable :term:`wait_for_ready` mechanism.</span>
  617. <span class="sd"> compression: An element of grpc.compression, e.g.</span>
  618. <span class="sd"> grpc.compression.Gzip. This is an EXPERIMENTAL option.</span>
  619. <span class="sd"> Returns:</span>
  620. <span class="sd"> The response value for the RPC and a Call value for the RPC.</span>
  621. <span class="sd"> Raises:</span>
  622. <span class="sd"> RpcError: Indicating that the RPC terminated with non-OK status. The</span>
  623. <span class="sd"> raised RpcError will also be a Call for the RPC affording the RPC&#39;s</span>
  624. <span class="sd"> metadata, status code, and details.</span>
  625. <span class="sd"> &quot;&quot;&quot;</span>
  626. <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span></div>
  627. <div class="viewcode-block" id="UnaryUnaryMultiCallable.future"><a class="viewcode-back" href="../grpc.html#grpc.UnaryUnaryMultiCallable.future">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
  628. <span class="k">def</span> <span class="nf">future</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
  629. <span class="n">request</span><span class="p">,</span>
  630. <span class="n">timeout</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
  631. <span class="n">metadata</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
  632. <span class="n">credentials</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
  633. <span class="n">wait_for_ready</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
  634. <span class="n">compression</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
  635. <span class="sd">&quot;&quot;&quot;Asynchronously invokes the underlying RPC.</span>
  636. <span class="sd"> Args:</span>
  637. <span class="sd"> request: The request value for the RPC.</span>
  638. <span class="sd"> timeout: An optional duration of time in seconds to allow for</span>
  639. <span class="sd"> the RPC.</span>
  640. <span class="sd"> metadata: Optional :term:`metadata` to be transmitted to the</span>
  641. <span class="sd"> service-side of the RPC.</span>
  642. <span class="sd"> credentials: An optional CallCredentials for the RPC. Only valid for</span>
  643. <span class="sd"> secure Channel.</span>
  644. <span class="sd"> wait_for_ready: This is an EXPERIMENTAL argument. An optional</span>
  645. <span class="sd"> flag to enable :term:`wait_for_ready` mechanism.</span>
  646. <span class="sd"> compression: An element of grpc.compression, e.g.</span>
  647. <span class="sd"> grpc.compression.Gzip. This is an EXPERIMENTAL option.</span>
  648. <span class="sd"> Returns:</span>
  649. <span class="sd"> An object that is both a Call for the RPC and a Future.</span>
  650. <span class="sd"> In the event of RPC completion, the return Call-Future&#39;s result</span>
  651. <span class="sd"> value will be the response message of the RPC.</span>
  652. <span class="sd"> Should the event terminate with non-OK status,</span>
  653. <span class="sd"> the returned Call-Future&#39;s exception value will be an RpcError.</span>
  654. <span class="sd"> &quot;&quot;&quot;</span>
  655. <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span></div></div>
  656. <div class="viewcode-block" id="UnaryStreamMultiCallable"><a class="viewcode-back" href="../grpc.html#grpc.UnaryStreamMultiCallable">[docs]</a><span class="k">class</span> <span class="nc">UnaryStreamMultiCallable</span><span class="p">(</span><span class="n">six</span><span class="o">.</span><span class="n">with_metaclass</span><span class="p">(</span><span class="n">abc</span><span class="o">.</span><span class="n">ABCMeta</span><span class="p">)):</span>
  657. <span class="sd">&quot;&quot;&quot;Affords invoking a unary-stream RPC from client-side.&quot;&quot;&quot;</span>
  658. <div class="viewcode-block" id="UnaryStreamMultiCallable.__call__"><a class="viewcode-back" href="../grpc.html#grpc.UnaryStreamMultiCallable.__call__">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
  659. <span class="k">def</span> <span class="fm">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
  660. <span class="n">request</span><span class="p">,</span>
  661. <span class="n">timeout</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
  662. <span class="n">metadata</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
  663. <span class="n">credentials</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
  664. <span class="n">wait_for_ready</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
  665. <span class="n">compression</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
  666. <span class="sd">&quot;&quot;&quot;Invokes the underlying RPC.</span>
  667. <span class="sd"> Args:</span>
  668. <span class="sd"> request: The request value for the RPC.</span>
  669. <span class="sd"> timeout: An optional duration of time in seconds to allow for</span>
  670. <span class="sd"> the RPC. If None, the timeout is considered infinite.</span>
  671. <span class="sd"> metadata: An optional :term:`metadata` to be transmitted to the</span>
  672. <span class="sd"> service-side of the RPC.</span>
  673. <span class="sd"> credentials: An optional CallCredentials for the RPC. Only valid for</span>
  674. <span class="sd"> secure Channel.</span>
  675. <span class="sd"> wait_for_ready: This is an EXPERIMENTAL argument. An optional</span>
  676. <span class="sd"> flag to enable :term:`wait_for_ready` mechanism.</span>
  677. <span class="sd"> compression: An element of grpc.compression, e.g.</span>
  678. <span class="sd"> grpc.compression.Gzip. This is an EXPERIMENTAL option.</span>
  679. <span class="sd"> Returns:</span>
  680. <span class="sd"> An object that is both a Call for the RPC and an iterator of</span>
  681. <span class="sd"> response values. Drawing response values from the returned</span>
  682. <span class="sd"> Call-iterator may raise RpcError indicating termination of the</span>
  683. <span class="sd"> RPC with non-OK status.</span>
  684. <span class="sd"> &quot;&quot;&quot;</span>
  685. <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span></div></div>
  686. <div class="viewcode-block" id="StreamUnaryMultiCallable"><a class="viewcode-back" href="../grpc.html#grpc.StreamUnaryMultiCallable">[docs]</a><span class="k">class</span> <span class="nc">StreamUnaryMultiCallable</span><span class="p">(</span><span class="n">six</span><span class="o">.</span><span class="n">with_metaclass</span><span class="p">(</span><span class="n">abc</span><span class="o">.</span><span class="n">ABCMeta</span><span class="p">)):</span>
  687. <span class="sd">&quot;&quot;&quot;Affords invoking a stream-unary RPC from client-side.&quot;&quot;&quot;</span>
  688. <div class="viewcode-block" id="StreamUnaryMultiCallable.__call__"><a class="viewcode-back" href="../grpc.html#grpc.StreamUnaryMultiCallable.__call__">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
  689. <span class="k">def</span> <span class="fm">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
  690. <span class="n">request_iterator</span><span class="p">,</span>
  691. <span class="n">timeout</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
  692. <span class="n">metadata</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
  693. <span class="n">credentials</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
  694. <span class="n">wait_for_ready</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
  695. <span class="n">compression</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
  696. <span class="sd">&quot;&quot;&quot;Synchronously invokes the underlying RPC.</span>
  697. <span class="sd"> Args:</span>
  698. <span class="sd"> request_iterator: An iterator that yields request values for</span>
  699. <span class="sd"> the RPC.</span>
  700. <span class="sd"> timeout: An optional duration of time in seconds to allow for</span>
  701. <span class="sd"> the RPC. If None, the timeout is considered infinite.</span>
  702. <span class="sd"> metadata: Optional :term:`metadata` to be transmitted to the</span>
  703. <span class="sd"> service-side of the RPC.</span>
  704. <span class="sd"> credentials: An optional CallCredentials for the RPC. Only valid for</span>
  705. <span class="sd"> secure Channel.</span>
  706. <span class="sd"> wait_for_ready: This is an EXPERIMENTAL argument. An optional</span>
  707. <span class="sd"> flag to enable :term:`wait_for_ready` mechanism.</span>
  708. <span class="sd"> compression: An element of grpc.compression, e.g.</span>
  709. <span class="sd"> grpc.compression.Gzip. This is an EXPERIMENTAL option.</span>
  710. <span class="sd"> Returns:</span>
  711. <span class="sd"> The response value for the RPC.</span>
  712. <span class="sd"> Raises:</span>
  713. <span class="sd"> RpcError: Indicating that the RPC terminated with non-OK status. The</span>
  714. <span class="sd"> raised RpcError will also implement grpc.Call, affording methods</span>
  715. <span class="sd"> such as metadata, code, and details.</span>
  716. <span class="sd"> &quot;&quot;&quot;</span>
  717. <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span></div>
  718. <div class="viewcode-block" id="StreamUnaryMultiCallable.with_call"><a class="viewcode-back" href="../grpc.html#grpc.StreamUnaryMultiCallable.with_call">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
  719. <span class="k">def</span> <span class="nf">with_call</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
  720. <span class="n">request_iterator</span><span class="p">,</span>
  721. <span class="n">timeout</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
  722. <span class="n">metadata</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
  723. <span class="n">credentials</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
  724. <span class="n">wait_for_ready</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
  725. <span class="n">compression</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
  726. <span class="sd">&quot;&quot;&quot;Synchronously invokes the underlying RPC on the client.</span>
  727. <span class="sd"> Args:</span>
  728. <span class="sd"> request_iterator: An iterator that yields request values for</span>
  729. <span class="sd"> the RPC.</span>
  730. <span class="sd"> timeout: An optional duration of time in seconds to allow for</span>
  731. <span class="sd"> the RPC. If None, the timeout is considered infinite.</span>
  732. <span class="sd"> metadata: Optional :term:`metadata` to be transmitted to the</span>
  733. <span class="sd"> service-side of the RPC.</span>
  734. <span class="sd"> credentials: An optional CallCredentials for the RPC. Only valid for</span>
  735. <span class="sd"> secure Channel.</span>
  736. <span class="sd"> wait_for_ready: This is an EXPERIMENTAL argument. An optional</span>
  737. <span class="sd"> flag to enable :term:`wait_for_ready` mechanism.</span>
  738. <span class="sd"> compression: An element of grpc.compression, e.g.</span>
  739. <span class="sd"> grpc.compression.Gzip. This is an EXPERIMENTAL option.</span>
  740. <span class="sd"> Returns:</span>
  741. <span class="sd"> The response value for the RPC and a Call object for the RPC.</span>
  742. <span class="sd"> Raises:</span>
  743. <span class="sd"> RpcError: Indicating that the RPC terminated with non-OK status. The</span>
  744. <span class="sd"> raised RpcError will also be a Call for the RPC affording the RPC&#39;s</span>
  745. <span class="sd"> metadata, status code, and details.</span>
  746. <span class="sd"> &quot;&quot;&quot;</span>
  747. <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span></div>
  748. <div class="viewcode-block" id="StreamUnaryMultiCallable.future"><a class="viewcode-back" href="../grpc.html#grpc.StreamUnaryMultiCallable.future">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
  749. <span class="k">def</span> <span class="nf">future</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
  750. <span class="n">request_iterator</span><span class="p">,</span>
  751. <span class="n">timeout</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
  752. <span class="n">metadata</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
  753. <span class="n">credentials</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
  754. <span class="n">wait_for_ready</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
  755. <span class="n">compression</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
  756. <span class="sd">&quot;&quot;&quot;Asynchronously invokes the underlying RPC on the client.</span>
  757. <span class="sd"> Args:</span>
  758. <span class="sd"> request_iterator: An iterator that yields request values for the RPC.</span>
  759. <span class="sd"> timeout: An optional duration of time in seconds to allow for</span>
  760. <span class="sd"> the RPC. If None, the timeout is considered infinite.</span>
  761. <span class="sd"> metadata: Optional :term:`metadata` to be transmitted to the</span>
  762. <span class="sd"> service-side of the RPC.</span>
  763. <span class="sd"> credentials: An optional CallCredentials for the RPC. Only valid for</span>
  764. <span class="sd"> secure Channel.</span>
  765. <span class="sd"> wait_for_ready: This is an EXPERIMENTAL argument. An optional</span>
  766. <span class="sd"> flag to enable :term:`wait_for_ready` mechanism.</span>
  767. <span class="sd"> compression: An element of grpc.compression, e.g.</span>
  768. <span class="sd"> grpc.compression.Gzip. This is an EXPERIMENTAL option.</span>
  769. <span class="sd"> Returns:</span>
  770. <span class="sd"> An object that is both a Call for the RPC and a Future.</span>
  771. <span class="sd"> In the event of RPC completion, the return Call-Future&#39;s result value</span>
  772. <span class="sd"> will be the response message of the RPC. Should the event terminate</span>
  773. <span class="sd"> with non-OK status, the returned Call-Future&#39;s exception value will</span>
  774. <span class="sd"> be an RpcError.</span>
  775. <span class="sd"> &quot;&quot;&quot;</span>
  776. <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span></div></div>
  777. <div class="viewcode-block" id="StreamStreamMultiCallable"><a class="viewcode-back" href="../grpc.html#grpc.StreamStreamMultiCallable">[docs]</a><span class="k">class</span> <span class="nc">StreamStreamMultiCallable</span><span class="p">(</span><span class="n">six</span><span class="o">.</span><span class="n">with_metaclass</span><span class="p">(</span><span class="n">abc</span><span class="o">.</span><span class="n">ABCMeta</span><span class="p">)):</span>
  778. <span class="sd">&quot;&quot;&quot;Affords invoking a stream-stream RPC on client-side.&quot;&quot;&quot;</span>
  779. <div class="viewcode-block" id="StreamStreamMultiCallable.__call__"><a class="viewcode-back" href="../grpc.html#grpc.StreamStreamMultiCallable.__call__">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
  780. <span class="k">def</span> <span class="fm">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
  781. <span class="n">request_iterator</span><span class="p">,</span>
  782. <span class="n">timeout</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
  783. <span class="n">metadata</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
  784. <span class="n">credentials</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
  785. <span class="n">wait_for_ready</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
  786. <span class="n">compression</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
  787. <span class="sd">&quot;&quot;&quot;Invokes the underlying RPC on the client.</span>
  788. <span class="sd"> Args:</span>
  789. <span class="sd"> request_iterator: An iterator that yields request values for the RPC.</span>
  790. <span class="sd"> timeout: An optional duration of time in seconds to allow for</span>
  791. <span class="sd"> the RPC. If not specified, the timeout is considered infinite.</span>
  792. <span class="sd"> metadata: Optional :term:`metadata` to be transmitted to the</span>
  793. <span class="sd"> service-side of the RPC.</span>
  794. <span class="sd"> credentials: An optional CallCredentials for the RPC. Only valid for</span>
  795. <span class="sd"> secure Channel.</span>
  796. <span class="sd"> wait_for_ready: This is an EXPERIMENTAL argument. An optional</span>
  797. <span class="sd"> flag to enable :term:`wait_for_ready` mechanism.</span>
  798. <span class="sd"> compression: An element of grpc.compression, e.g.</span>
  799. <span class="sd"> grpc.compression.Gzip. This is an EXPERIMENTAL option.</span>
  800. <span class="sd"> Returns:</span>
  801. <span class="sd"> An object that is both a Call for the RPC and an iterator of</span>
  802. <span class="sd"> response values. Drawing response values from the returned</span>
  803. <span class="sd"> Call-iterator may raise RpcError indicating termination of the</span>
  804. <span class="sd"> RPC with non-OK status.</span>
  805. <span class="sd"> &quot;&quot;&quot;</span>
  806. <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span></div></div>
  807. <span class="c1">############################# Channel Interface ##############################</span>
  808. <div class="viewcode-block" id="Channel"><a class="viewcode-back" href="../grpc.html#grpc.Channel">[docs]</a><span class="k">class</span> <span class="nc">Channel</span><span class="p">(</span><span class="n">six</span><span class="o">.</span><span class="n">with_metaclass</span><span class="p">(</span><span class="n">abc</span><span class="o">.</span><span class="n">ABCMeta</span><span class="p">)):</span>
  809. <span class="sd">&quot;&quot;&quot;Affords RPC invocation via generic methods on client-side.</span>
  810. <span class="sd"> Channel objects implement the Context Manager type, although they need not</span>
  811. <span class="sd"> support being entered and exited multiple times.</span>
  812. <span class="sd"> &quot;&quot;&quot;</span>
  813. <div class="viewcode-block" id="Channel.subscribe"><a class="viewcode-back" href="../grpc.html#grpc.Channel.subscribe">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
  814. <span class="k">def</span> <span class="nf">subscribe</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">try_to_connect</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
  815. <span class="sd">&quot;&quot;&quot;Subscribe to this Channel&#39;s connectivity state machine.</span>
  816. <span class="sd"> A Channel may be in any of the states described by ChannelConnectivity.</span>
  817. <span class="sd"> This method allows application to monitor the state transitions.</span>
  818. <span class="sd"> The typical use case is to debug or gain better visibility into gRPC</span>
  819. <span class="sd"> runtime&#39;s state.</span>
  820. <span class="sd"> Args:</span>
  821. <span class="sd"> callback: A callable to be invoked with ChannelConnectivity argument.</span>
  822. <span class="sd"> ChannelConnectivity describes current state of the channel.</span>
  823. <span class="sd"> The callable will be invoked immediately upon subscription</span>
  824. <span class="sd"> and again for every change to ChannelConnectivity until it</span>
  825. <span class="sd"> is unsubscribed or this Channel object goes out of scope.</span>
  826. <span class="sd"> try_to_connect: A boolean indicating whether or not this Channel</span>
  827. <span class="sd"> should attempt to connect immediately. If set to False, gRPC</span>
  828. <span class="sd"> runtime decides when to connect.</span>
  829. <span class="sd"> &quot;&quot;&quot;</span>
  830. <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span></div>
  831. <div class="viewcode-block" id="Channel.unsubscribe"><a class="viewcode-back" href="../grpc.html#grpc.Channel.unsubscribe">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
  832. <span class="k">def</span> <span class="nf">unsubscribe</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">callback</span><span class="p">):</span>
  833. <span class="sd">&quot;&quot;&quot;Unsubscribes a subscribed callback from this Channel&#39;s connectivity.</span>
  834. <span class="sd"> Args:</span>
  835. <span class="sd"> callback: A callable previously registered with this Channel from</span>
  836. <span class="sd"> having been passed to its &quot;subscribe&quot; method.</span>
  837. <span class="sd"> &quot;&quot;&quot;</span>
  838. <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span></div>
  839. <div class="viewcode-block" id="Channel.unary_unary"><a class="viewcode-back" href="../grpc.html#grpc.Channel.unary_unary">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
  840. <span class="k">def</span> <span class="nf">unary_unary</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
  841. <span class="n">method</span><span class="p">,</span>
  842. <span class="n">request_serializer</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
  843. <span class="n">response_deserializer</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
  844. <span class="sd">&quot;&quot;&quot;Creates a UnaryUnaryMultiCallable for a unary-unary method.</span>
  845. <span class="sd"> Args:</span>
  846. <span class="sd"> method: The name of the RPC method.</span>
  847. <span class="sd"> request_serializer: Optional :term:`serializer` for serializing the request</span>
  848. <span class="sd"> message. Request goes unserialized in case None is passed.</span>
  849. <span class="sd"> response_deserializer: Optional :term:`deserializer` for deserializing the</span>
  850. <span class="sd"> response message. Response goes undeserialized in case None</span>
  851. <span class="sd"> is passed.</span>
  852. <span class="sd"> Returns:</span>
  853. <span class="sd"> A UnaryUnaryMultiCallable value for the named unary-unary method.</span>
  854. <span class="sd"> &quot;&quot;&quot;</span>
  855. <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span></div>
  856. <div class="viewcode-block" id="Channel.unary_stream"><a class="viewcode-back" href="../grpc.html#grpc.Channel.unary_stream">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
  857. <span class="k">def</span> <span class="nf">unary_stream</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
  858. <span class="n">method</span><span class="p">,</span>
  859. <span class="n">request_serializer</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
  860. <span class="n">response_deserializer</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
  861. <span class="sd">&quot;&quot;&quot;Creates a UnaryStreamMultiCallable for a unary-stream method.</span>
  862. <span class="sd"> Args:</span>
  863. <span class="sd"> method: The name of the RPC method.</span>
  864. <span class="sd"> request_serializer: Optional :term:`serializer` for serializing the request</span>
  865. <span class="sd"> message. Request goes unserialized in case None is passed.</span>
  866. <span class="sd"> response_deserializer: Optional :term:`deserializer` for deserializing the</span>
  867. <span class="sd"> response message. Response goes undeserialized in case None is</span>
  868. <span class="sd"> passed.</span>
  869. <span class="sd"> Returns:</span>
  870. <span class="sd"> A UnaryStreamMultiCallable value for the name unary-stream method.</span>
  871. <span class="sd"> &quot;&quot;&quot;</span>
  872. <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span></div>
  873. <div class="viewcode-block" id="Channel.stream_unary"><a class="viewcode-back" href="../grpc.html#grpc.Channel.stream_unary">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
  874. <span class="k">def</span> <span class="nf">stream_unary</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
  875. <span class="n">method</span><span class="p">,</span>
  876. <span class="n">request_serializer</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
  877. <span class="n">response_deserializer</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
  878. <span class="sd">&quot;&quot;&quot;Creates a StreamUnaryMultiCallable for a stream-unary method.</span>
  879. <span class="sd"> Args:</span>
  880. <span class="sd"> method: The name of the RPC method.</span>
  881. <span class="sd"> request_serializer: Optional :term:`serializer` for serializing the request</span>
  882. <span class="sd"> message. Request goes unserialized in case None is passed.</span>
  883. <span class="sd"> response_deserializer: Optional :term:`deserializer` for deserializing the</span>
  884. <span class="sd"> response message. Response goes undeserialized in case None is</span>
  885. <span class="sd"> passed.</span>
  886. <span class="sd"> Returns:</span>
  887. <span class="sd"> A StreamUnaryMultiCallable value for the named stream-unary method.</span>
  888. <span class="sd"> &quot;&quot;&quot;</span>
  889. <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span></div>
  890. <div class="viewcode-block" id="Channel.stream_stream"><a class="viewcode-back" href="../grpc.html#grpc.Channel.stream_stream">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
  891. <span class="k">def</span> <span class="nf">stream_stream</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
  892. <span class="n">method</span><span class="p">,</span>
  893. <span class="n">request_serializer</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
  894. <span class="n">response_deserializer</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
  895. <span class="sd">&quot;&quot;&quot;Creates a StreamStreamMultiCallable for a stream-stream method.</span>
  896. <span class="sd"> Args:</span>
  897. <span class="sd"> method: The name of the RPC method.</span>
  898. <span class="sd"> request_serializer: Optional :term:`serializer` for serializing the request</span>
  899. <span class="sd"> message. Request goes unserialized in case None is passed.</span>
  900. <span class="sd"> response_deserializer: Optional :term:`deserializer` for deserializing the</span>
  901. <span class="sd"> response message. Response goes undeserialized in case None</span>
  902. <span class="sd"> is passed.</span>
  903. <span class="sd"> Returns:</span>
  904. <span class="sd"> A StreamStreamMultiCallable value for the named stream-stream method.</span>
  905. <span class="sd"> &quot;&quot;&quot;</span>
  906. <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span></div>
  907. <div class="viewcode-block" id="Channel.close"><a class="viewcode-back" href="../grpc.html#grpc.Channel.close">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
  908. <span class="k">def</span> <span class="nf">close</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
  909. <span class="sd">&quot;&quot;&quot;Closes this Channel and releases all resources held by it.</span>
  910. <span class="sd"> Closing the Channel will immediately terminate all RPCs active with the</span>
  911. <span class="sd"> Channel and it is not valid to invoke new RPCs with the Channel.</span>
  912. <span class="sd"> This method is idempotent.</span>
  913. <span class="sd"> &quot;&quot;&quot;</span>
  914. <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span></div>
  915. <div class="viewcode-block" id="Channel.__enter__"><a class="viewcode-back" href="../grpc.html#grpc.Channel.__enter__">[docs]</a> <span class="k">def</span> <span class="fm">__enter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
  916. <span class="sd">&quot;&quot;&quot;Enters the runtime context related to the channel object.&quot;&quot;&quot;</span>
  917. <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span></div>
  918. <div class="viewcode-block" id="Channel.__exit__"><a class="viewcode-back" href="../grpc.html#grpc.Channel.__exit__">[docs]</a> <span class="k">def</span> <span class="fm">__exit__</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>
  919. <span class="sd">&quot;&quot;&quot;Exits the runtime context related to the channel object.&quot;&quot;&quot;</span>
  920. <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span></div></div>
  921. <span class="c1">########################## Service-Side Context ##############################</span>
  922. <div class="viewcode-block" id="ServicerContext"><a class="viewcode-back" href="../grpc.html#grpc.ServicerContext">[docs]</a><span class="k">class</span> <span class="nc">ServicerContext</span><span class="p">(</span><span class="n">six</span><span class="o">.</span><span class="n">with_metaclass</span><span class="p">(</span><span class="n">abc</span><span class="o">.</span><span class="n">ABCMeta</span><span class="p">,</span> <span class="n">RpcContext</span><span class="p">)):</span>
  923. <span class="sd">&quot;&quot;&quot;A context object passed to method implementations.&quot;&quot;&quot;</span>
  924. <div class="viewcode-block" id="ServicerContext.invocation_metadata"><a class="viewcode-back" href="../grpc.html#grpc.ServicerContext.invocation_metadata">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
  925. <span class="k">def</span> <span class="nf">invocation_metadata</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
  926. <span class="sd">&quot;&quot;&quot;Accesses the metadata from the sent by the client.</span>
  927. <span class="sd"> Returns:</span>
  928. <span class="sd"> The invocation :term:`metadata`.</span>
  929. <span class="sd"> &quot;&quot;&quot;</span>
  930. <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span></div>
  931. <div class="viewcode-block" id="ServicerContext.peer"><a class="viewcode-back" href="../grpc.html#grpc.ServicerContext.peer">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
  932. <span class="k">def</span> <span class="nf">peer</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
  933. <span class="sd">&quot;&quot;&quot;Identifies the peer that invoked the RPC being serviced.</span>
  934. <span class="sd"> Returns:</span>
  935. <span class="sd"> A string identifying the peer that invoked the RPC being serviced.</span>
  936. <span class="sd"> The string format is determined by gRPC runtime.</span>
  937. <span class="sd"> &quot;&quot;&quot;</span>
  938. <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span></div>
  939. <div class="viewcode-block" id="ServicerContext.peer_identities"><a class="viewcode-back" href="../grpc.html#grpc.ServicerContext.peer_identities">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
  940. <span class="k">def</span> <span class="nf">peer_identities</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
  941. <span class="sd">&quot;&quot;&quot;Gets one or more peer identity(s).</span>
  942. <span class="sd"> Equivalent to</span>
  943. <span class="sd"> servicer_context.auth_context().get(servicer_context.peer_identity_key())</span>
  944. <span class="sd"> Returns:</span>
  945. <span class="sd"> An iterable of the identities, or None if the call is not</span>
  946. <span class="sd"> authenticated. Each identity is returned as a raw bytes type.</span>
  947. <span class="sd"> &quot;&quot;&quot;</span>
  948. <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span></div>
  949. <div class="viewcode-block" id="ServicerContext.peer_identity_key"><a class="viewcode-back" href="../grpc.html#grpc.ServicerContext.peer_identity_key">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
  950. <span class="k">def</span> <span class="nf">peer_identity_key</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
  951. <span class="sd">&quot;&quot;&quot;The auth property used to identify the peer.</span>
  952. <span class="sd"> For example, &quot;x509_common_name&quot; or &quot;x509_subject_alternative_name&quot; are</span>
  953. <span class="sd"> used to identify an SSL peer.</span>
  954. <span class="sd"> Returns:</span>
  955. <span class="sd"> The auth property (string) that indicates the</span>
  956. <span class="sd"> peer identity, or None if the call is not authenticated.</span>
  957. <span class="sd"> &quot;&quot;&quot;</span>
  958. <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span></div>
  959. <div class="viewcode-block" id="ServicerContext.auth_context"><a class="viewcode-back" href="../grpc.html#grpc.ServicerContext.auth_context">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
  960. <span class="k">def</span> <span class="nf">auth_context</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
  961. <span class="sd">&quot;&quot;&quot;Gets the auth context for the call.</span>
  962. <span class="sd"> Returns:</span>
  963. <span class="sd"> A map of strings to an iterable of bytes for each auth property.</span>
  964. <span class="sd"> &quot;&quot;&quot;</span>
  965. <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span></div>
  966. <div class="viewcode-block" id="ServicerContext.set_compression"><a class="viewcode-back" href="../grpc.html#grpc.ServicerContext.set_compression">[docs]</a> <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>
  967. <span class="sd">&quot;&quot;&quot;Set the compression algorithm to be used for the entire call.</span>
  968. <span class="sd"> This is an EXPERIMENTAL method.</span>
  969. <span class="sd"> Args:</span>
  970. <span class="sd"> compression: An element of grpc.compression, e.g.</span>
  971. <span class="sd"> grpc.compression.Gzip.</span>
  972. <span class="sd"> &quot;&quot;&quot;</span>
  973. <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span></div>
  974. <div class="viewcode-block" id="ServicerContext.send_initial_metadata"><a class="viewcode-back" href="../grpc.html#grpc.ServicerContext.send_initial_metadata">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
  975. <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>
  976. <span class="sd">&quot;&quot;&quot;Sends the initial metadata value to the client.</span>
  977. <span class="sd"> This method need not be called by implementations if they have no</span>
  978. <span class="sd"> metadata to add to what the gRPC runtime will transmit.</span>
  979. <span class="sd"> Args:</span>
  980. <span class="sd"> initial_metadata: The initial :term:`metadata`.</span>
  981. <span class="sd"> &quot;&quot;&quot;</span>
  982. <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span></div>
  983. <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>
  984. <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>
  985. <span class="sd">&quot;&quot;&quot;Sets the trailing metadata for the RPC.</span>
  986. <span class="sd"> Sets the trailing metadata to be sent upon completion of the RPC.</span>
  987. <span class="sd"> If this method is invoked multiple times throughout the lifetime of an</span>
  988. <span class="sd"> RPC, the value supplied in the final invocation will be the value sent</span>
  989. <span class="sd"> over the wire.</span>
  990. <span class="sd"> This method need not be called by implementations if they have no</span>
  991. <span class="sd"> metadata to add to what the gRPC runtime will transmit.</span>
  992. <span class="sd"> Args:</span>
  993. <span class="sd"> trailing_metadata: The trailing :term:`metadata`.</span>
  994. <span class="sd"> &quot;&quot;&quot;</span>
  995. <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span></div>
  996. <div class="viewcode-block" id="ServicerContext.abort"><a class="viewcode-back" href="../grpc.html#grpc.ServicerContext.abort">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
  997. <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">details</span><span class="p">):</span>
  998. <span class="sd">&quot;&quot;&quot;Raises an exception to terminate the RPC with a non-OK status.</span>
  999. <span class="sd"> The code and details passed as arguments will supercede any existing</span>
  1000. <span class="sd"> ones.</span>
  1001. <span class="sd"> Args:</span>
  1002. <span class="sd"> code: A StatusCode object to be sent to the client.</span>
  1003. <span class="sd"> It must not be StatusCode.OK.</span>
  1004. <span class="sd"> details: A UTF-8-encodable string to be sent to the client upon</span>
  1005. <span class="sd"> termination of the RPC.</span>
  1006. <span class="sd"> Raises:</span>
  1007. <span class="sd"> Exception: An exception is always raised to signal the abortion the</span>
  1008. <span class="sd"> RPC to the gRPC runtime.</span>
  1009. <span class="sd"> &quot;&quot;&quot;</span>
  1010. <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span></div>
  1011. <div class="viewcode-block" id="ServicerContext.abort_with_status"><a class="viewcode-back" href="../grpc.html#grpc.ServicerContext.abort_with_status">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
  1012. <span class="k">def</span> <span class="nf">abort_with_status</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">status</span><span class="p">):</span>
  1013. <span class="sd">&quot;&quot;&quot;Raises an exception to terminate the RPC with a non-OK status.</span>
  1014. <span class="sd"> The status passed as argument will supercede any existing status code,</span>
  1015. <span class="sd"> status message and trailing metadata.</span>
  1016. <span class="sd"> This is an EXPERIMENTAL API.</span>
  1017. <span class="sd"> Args:</span>
  1018. <span class="sd"> status: A grpc.Status object. The status code in it must not be</span>
  1019. <span class="sd"> StatusCode.OK.</span>
  1020. <span class="sd"> Raises:</span>
  1021. <span class="sd"> Exception: An exception is always raised to signal the abortion the</span>
  1022. <span class="sd"> RPC to the gRPC runtime.</span>
  1023. <span class="sd"> &quot;&quot;&quot;</span>
  1024. <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span></div>
  1025. <div class="viewcode-block" id="ServicerContext.set_code"><a class="viewcode-back" href="../grpc.html#grpc.ServicerContext.set_code">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
  1026. <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>
  1027. <span class="sd">&quot;&quot;&quot;Sets the value to be used as status code upon RPC completion.</span>
  1028. <span class="sd"> This method need not be called by method implementations if they wish</span>
  1029. <span class="sd"> the gRPC runtime to determine the status code of the RPC.</span>
  1030. <span class="sd"> Args:</span>
  1031. <span class="sd"> code: A StatusCode object to be sent to the client.</span>
  1032. <span class="sd"> &quot;&quot;&quot;</span>
  1033. <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span></div>
  1034. <div class="viewcode-block" id="ServicerContext.set_details"><a class="viewcode-back" href="../grpc.html#grpc.ServicerContext.set_details">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
  1035. <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>
  1036. <span class="sd">&quot;&quot;&quot;Sets the value to be used as detail string upon RPC completion.</span>
  1037. <span class="sd"> This method need not be called by method implementations if they have</span>
  1038. <span class="sd"> no details to transmit.</span>
  1039. <span class="sd"> Args:</span>
  1040. <span class="sd"> details: A UTF-8-encodable string to be sent to the client upon</span>
  1041. <span class="sd"> termination of the RPC.</span>
  1042. <span class="sd"> &quot;&quot;&quot;</span>
  1043. <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span></div>
  1044. <div class="viewcode-block" id="ServicerContext.disable_next_message_compression"><a class="viewcode-back" href="../grpc.html#grpc.ServicerContext.disable_next_message_compression">[docs]</a> <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>
  1045. <span class="sd">&quot;&quot;&quot;Disables compression for the next response message.</span>
  1046. <span class="sd"> This is an EXPERIMENTAL method.</span>
  1047. <span class="sd"> This method will override any compression configuration set during</span>
  1048. <span class="sd"> server creation or set on the call.</span>
  1049. <span class="sd"> &quot;&quot;&quot;</span>
  1050. <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span></div></div>
  1051. <span class="c1">##################### Service-Side Handler Interfaces ########################</span>
  1052. <div class="viewcode-block" id="RpcMethodHandler"><a class="viewcode-back" href="../grpc.html#grpc.RpcMethodHandler">[docs]</a><span class="k">class</span> <span class="nc">RpcMethodHandler</span><span class="p">(</span><span class="n">six</span><span class="o">.</span><span class="n">with_metaclass</span><span class="p">(</span><span class="n">abc</span><span class="o">.</span><span class="n">ABCMeta</span><span class="p">)):</span>
  1053. <span class="sd">&quot;&quot;&quot;An implementation of a single RPC method.</span>
  1054. <span class="sd"> Attributes:</span>
  1055. <span class="sd"> request_streaming: Whether the RPC supports exactly one request message</span>
  1056. <span class="sd"> or any arbitrary number of request messages.</span>
  1057. <span class="sd"> response_streaming: Whether the RPC supports exactly one response message</span>
  1058. <span class="sd"> or any arbitrary number of response messages.</span>
  1059. <span class="sd"> request_deserializer: A callable :term:`deserializer` that accepts a byte string and</span>
  1060. <span class="sd"> returns an object suitable to be passed to this object&#39;s business</span>
  1061. <span class="sd"> logic, or None to indicate that this object&#39;s business logic should be</span>
  1062. <span class="sd"> passed the raw request bytes.</span>
  1063. <span class="sd"> response_serializer: A callable :term:`serializer` that accepts an object produced</span>
  1064. <span class="sd"> by this object&#39;s business logic and returns a byte string, or None to</span>
  1065. <span class="sd"> indicate that the byte strings produced by this object&#39;s business logic</span>
  1066. <span class="sd"> should be transmitted on the wire as they are.</span>
  1067. <span class="sd"> unary_unary: This object&#39;s application-specific business logic as a</span>
  1068. <span class="sd"> callable value that takes a request value and a ServicerContext object</span>
  1069. <span class="sd"> and returns a response value. Only non-None if both request_streaming</span>
  1070. <span class="sd"> and response_streaming are False.</span>
  1071. <span class="sd"> unary_stream: This object&#39;s application-specific business logic as a</span>
  1072. <span class="sd"> callable value that takes a request value and a ServicerContext object</span>
  1073. <span class="sd"> and returns an iterator of response values. Only non-None if</span>
  1074. <span class="sd"> request_streaming is False and response_streaming is True.</span>
  1075. <span class="sd"> stream_unary: This object&#39;s application-specific business logic as a</span>
  1076. <span class="sd"> callable value that takes an iterator of request values and a</span>
  1077. <span class="sd"> ServicerContext object and returns a response value. Only non-None if</span>
  1078. <span class="sd"> request_streaming is True and response_streaming is False.</span>
  1079. <span class="sd"> stream_stream: This object&#39;s application-specific business logic as a</span>
  1080. <span class="sd"> callable value that takes an iterator of request values and a</span>
  1081. <span class="sd"> ServicerContext object and returns an iterator of response values.</span>
  1082. <span class="sd"> Only non-None if request_streaming and response_streaming are both</span>
  1083. <span class="sd"> True.</span>
  1084. <span class="sd"> &quot;&quot;&quot;</span></div>
  1085. <div class="viewcode-block" id="HandlerCallDetails"><a class="viewcode-back" href="../grpc.html#grpc.HandlerCallDetails">[docs]</a><span class="k">class</span> <span class="nc">HandlerCallDetails</span><span class="p">(</span><span class="n">six</span><span class="o">.</span><span class="n">with_metaclass</span><span class="p">(</span><span class="n">abc</span><span class="o">.</span><span class="n">ABCMeta</span><span class="p">)):</span>
  1086. <span class="sd">&quot;&quot;&quot;Describes an RPC that has just arrived for service.</span>
  1087. <span class="sd"> Attributes:</span>
  1088. <span class="sd"> method: The method name of the RPC.</span>
  1089. <span class="sd"> invocation_metadata: The :term:`metadata` sent by the client.</span>
  1090. <span class="sd"> &quot;&quot;&quot;</span></div>
  1091. <div class="viewcode-block" id="GenericRpcHandler"><a class="viewcode-back" href="../grpc.html#grpc.GenericRpcHandler">[docs]</a><span class="k">class</span> <span class="nc">GenericRpcHandler</span><span class="p">(</span><span class="n">six</span><span class="o">.</span><span class="n">with_metaclass</span><span class="p">(</span><span class="n">abc</span><span class="o">.</span><span class="n">ABCMeta</span><span class="p">)):</span>
  1092. <span class="sd">&quot;&quot;&quot;An implementation of arbitrarily many RPC methods.&quot;&quot;&quot;</span>
  1093. <div class="viewcode-block" id="GenericRpcHandler.service"><a class="viewcode-back" href="../grpc.html#grpc.GenericRpcHandler.service">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
  1094. <span class="k">def</span> <span class="nf">service</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">handler_call_details</span><span class="p">):</span>
  1095. <span class="sd">&quot;&quot;&quot;Returns the handler for servicing the RPC.</span>
  1096. <span class="sd"> Args:</span>
  1097. <span class="sd"> handler_call_details: A HandlerCallDetails describing the RPC.</span>
  1098. <span class="sd"> Returns:</span>
  1099. <span class="sd"> An RpcMethodHandler with which the RPC may be serviced if the</span>
  1100. <span class="sd"> implementation chooses to service this RPC, or None otherwise.</span>
  1101. <span class="sd"> &quot;&quot;&quot;</span>
  1102. <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span></div></div>
  1103. <div class="viewcode-block" id="ServiceRpcHandler"><a class="viewcode-back" href="../grpc.html#grpc.ServiceRpcHandler">[docs]</a><span class="k">class</span> <span class="nc">ServiceRpcHandler</span><span class="p">(</span><span class="n">six</span><span class="o">.</span><span class="n">with_metaclass</span><span class="p">(</span><span class="n">abc</span><span class="o">.</span><span class="n">ABCMeta</span><span class="p">,</span> <span class="n">GenericRpcHandler</span><span class="p">)):</span>
  1104. <span class="sd">&quot;&quot;&quot;An implementation of RPC methods belonging to a service.</span>
  1105. <span class="sd"> A service handles RPC methods with structured names of the form</span>
  1106. <span class="sd"> &#39;/Service.Name/Service.Method&#39;, where &#39;Service.Name&#39; is the value</span>
  1107. <span class="sd"> returned by service_name(), and &#39;Service.Method&#39; is the method</span>
  1108. <span class="sd"> name. A service can have multiple method names, but only a single</span>
  1109. <span class="sd"> service name.</span>
  1110. <span class="sd"> &quot;&quot;&quot;</span>
  1111. <div class="viewcode-block" id="ServiceRpcHandler.service_name"><a class="viewcode-back" href="../grpc.html#grpc.ServiceRpcHandler.service_name">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
  1112. <span class="k">def</span> <span class="nf">service_name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
  1113. <span class="sd">&quot;&quot;&quot;Returns this service&#39;s name.</span>
  1114. <span class="sd"> Returns:</span>
  1115. <span class="sd"> The service name.</span>
  1116. <span class="sd"> &quot;&quot;&quot;</span>
  1117. <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span></div></div>
  1118. <span class="c1">#################### Service-Side Interceptor Interfaces #####################</span>
  1119. <div class="viewcode-block" id="ServerInterceptor"><a class="viewcode-back" href="../grpc.html#grpc.ServerInterceptor">[docs]</a><span class="k">class</span> <span class="nc">ServerInterceptor</span><span class="p">(</span><span class="n">six</span><span class="o">.</span><span class="n">with_metaclass</span><span class="p">(</span><span class="n">abc</span><span class="o">.</span><span class="n">ABCMeta</span><span class="p">)):</span>
  1120. <span class="sd">&quot;&quot;&quot;Affords intercepting incoming RPCs on the service-side.</span>
  1121. <span class="sd"> This is an EXPERIMENTAL API.</span>
  1122. <span class="sd"> &quot;&quot;&quot;</span>
  1123. <div class="viewcode-block" id="ServerInterceptor.intercept_service"><a class="viewcode-back" href="../grpc.html#grpc.ServerInterceptor.intercept_service">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
  1124. <span class="k">def</span> <span class="nf">intercept_service</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">handler_call_details</span><span class="p">):</span>
  1125. <span class="sd">&quot;&quot;&quot;Intercepts incoming RPCs before handing them over to a handler.</span>
  1126. <span class="sd"> Args:</span>
  1127. <span class="sd"> continuation: A function that takes a HandlerCallDetails and</span>
  1128. <span class="sd"> proceeds to invoke the next interceptor in the chain, if any,</span>
  1129. <span class="sd"> or the RPC handler lookup logic, with the call details passed</span>
  1130. <span class="sd"> as an argument, and returns an RpcMethodHandler instance if</span>
  1131. <span class="sd"> the RPC is considered serviced, or None otherwise.</span>
  1132. <span class="sd"> handler_call_details: A HandlerCallDetails describing the RPC.</span>
  1133. <span class="sd"> Returns:</span>
  1134. <span class="sd"> An RpcMethodHandler with which the RPC may be serviced if the</span>
  1135. <span class="sd"> interceptor chooses to service this RPC, or None otherwise.</span>
  1136. <span class="sd"> &quot;&quot;&quot;</span>
  1137. <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span></div></div>
  1138. <span class="c1">############################# Server Interface ###############################</span>
  1139. <div class="viewcode-block" id="Server"><a class="viewcode-back" href="../grpc.html#grpc.Server">[docs]</a><span class="k">class</span> <span class="nc">Server</span><span class="p">(</span><span class="n">six</span><span class="o">.</span><span class="n">with_metaclass</span><span class="p">(</span><span class="n">abc</span><span class="o">.</span><span class="n">ABCMeta</span><span class="p">)):</span>
  1140. <span class="sd">&quot;&quot;&quot;Services RPCs.&quot;&quot;&quot;</span>
  1141. <div class="viewcode-block" id="Server.add_generic_rpc_handlers"><a class="viewcode-back" href="../grpc.html#grpc.Server.add_generic_rpc_handlers">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
  1142. <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>
  1143. <span class="sd">&quot;&quot;&quot;Registers GenericRpcHandlers with this Server.</span>
  1144. <span class="sd"> This method is only safe to call before the server is started.</span>
  1145. <span class="sd"> Args:</span>
  1146. <span class="sd"> generic_rpc_handlers: An iterable of GenericRpcHandlers that will be</span>
  1147. <span class="sd"> used to service RPCs.</span>
  1148. <span class="sd"> &quot;&quot;&quot;</span>
  1149. <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span></div>
  1150. <div class="viewcode-block" id="Server.add_insecure_port"><a class="viewcode-back" href="../grpc.html#grpc.Server.add_insecure_port">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
  1151. <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>
  1152. <span class="sd">&quot;&quot;&quot;Opens an insecure port for accepting RPCs.</span>
  1153. <span class="sd"> This method may only be called before starting the server.</span>
  1154. <span class="sd"> Args:</span>
  1155. <span class="sd"> address: The address for which to open a port. If the port is 0,</span>
  1156. <span class="sd"> or not specified in the address, then gRPC runtime will choose a port.</span>
  1157. <span class="sd"> Returns:</span>
  1158. <span class="sd"> An integer port on which server will accept RPC requests.</span>
  1159. <span class="sd"> &quot;&quot;&quot;</span>
  1160. <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span></div>
  1161. <div class="viewcode-block" id="Server.add_secure_port"><a class="viewcode-back" href="../grpc.html#grpc.Server.add_secure_port">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
  1162. <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="n">server_credentials</span><span class="p">):</span>
  1163. <span class="sd">&quot;&quot;&quot;Opens a secure port for accepting RPCs.</span>
  1164. <span class="sd"> This method may only be called before starting the server.</span>
  1165. <span class="sd"> Args:</span>
  1166. <span class="sd"> address: The address for which to open a port.</span>
  1167. <span class="sd"> if the port is 0, or not specified in the address, then gRPC</span>
  1168. <span class="sd"> runtime will choose a port.</span>
  1169. <span class="sd"> server_credentials: A ServerCredentials object.</span>
  1170. <span class="sd"> Returns:</span>
  1171. <span class="sd"> An integer port on which server will accept RPC requests.</span>
  1172. <span class="sd"> &quot;&quot;&quot;</span>
  1173. <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span></div>
  1174. <div class="viewcode-block" id="Server.start"><a class="viewcode-back" href="../grpc.html#grpc.Server.start">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
  1175. <span class="k">def</span> <span class="nf">start</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
  1176. <span class="sd">&quot;&quot;&quot;Starts this Server.</span>
  1177. <span class="sd"> This method may only be called once. (i.e. it is not idempotent).</span>
  1178. <span class="sd"> &quot;&quot;&quot;</span>
  1179. <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span></div>
  1180. <div class="viewcode-block" id="Server.stop"><a class="viewcode-back" href="../grpc.html#grpc.Server.stop">[docs]</a> <span class="nd">@abc</span><span class="o">.</span><span class="n">abstractmethod</span>
  1181. <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>
  1182. <span class="sd">&quot;&quot;&quot;Stops this Server.</span>
  1183. <span class="sd"> This method immediately stop service of new RPCs in all cases.</span>
  1184. <span class="sd"> If a grace period is specified, this method returns immediately</span>
  1185. <span class="sd"> and all RPCs active at the end of the grace period are aborted.</span>
  1186. <span class="sd"> If a grace period is not specified (by passing None for `grace`),</span>
  1187. <span class="sd"> all existing RPCs are aborted immediately and this method</span>
  1188. <span class="sd"> blocks until the last RPC handler terminates.</span>
  1189. <span class="sd"> This method is idempotent and may be called at any time.</span>
  1190. <span class="sd"> Passing a smaller grace value in a subsequent call will have</span>
  1191. <span class="sd"> the effect of stopping the Server sooner (passing None will</span>
  1192. <span class="sd"> have the effect of stopping the server immediately). Passing</span>
  1193. <span class="sd"> a larger grace value in a subsequent call *will not* have the</span>
  1194. <span class="sd"> effect of stopping the server later (i.e. the most restrictive</span>
  1195. <span class="sd"> grace value is used).</span>
  1196. <span class="sd"> Args:</span>
  1197. <span class="sd"> grace: A duration of time in seconds or None.</span>
  1198. <span class="sd"> Returns:</span>
  1199. <span class="sd"> A threading.Event that will be set when this Server has completely</span>
  1200. <span class="sd"> stopped, i.e. when running RPCs either complete or are aborted and</span>
  1201. <span class="sd"> all handlers have terminated.</span>
  1202. <span class="sd"> &quot;&quot;&quot;</span>
  1203. <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span></div>
  1204. <div class="viewcode-block" id="Server.wait_for_termination"><a class="viewcode-back" href="../grpc.html#grpc.Server.wait_for_termination">[docs]</a> <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="o">=</span><span class="kc">None</span><span class="p">):</span>
  1205. <span class="sd">&quot;&quot;&quot;Block current thread until the server stops.</span>
  1206. <span class="sd"> This is an EXPERIMENTAL API.</span>
  1207. <span class="sd"> The wait will not consume computational resources during blocking, and</span>
  1208. <span class="sd"> it will block until one of the two following conditions are met:</span>
  1209. <span class="sd"> 1) The server is stopped or terminated;</span>
  1210. <span class="sd"> 2) A timeout occurs if timeout is not `None`.</span>
  1211. <span class="sd"> The timeout argument works in the same way as `threading.Event.wait()`.</span>
  1212. <span class="sd"> https://docs.python.org/3/library/threading.html#threading.Event.wait</span>
  1213. <span class="sd"> Args:</span>
  1214. <span class="sd"> timeout: A floating point number specifying a timeout for the</span>
  1215. <span class="sd"> operation in seconds.</span>
  1216. <span class="sd"> Returns:</span>
  1217. <span class="sd"> A bool indicates if the operation times out.</span>
  1218. <span class="sd"> &quot;&quot;&quot;</span>
  1219. <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span></div></div>
  1220. <span class="c1">################################# Functions ################################</span>
  1221. <div class="viewcode-block" id="unary_unary_rpc_method_handler"><a class="viewcode-back" href="../grpc.html#grpc.unary_unary_rpc_method_handler">[docs]</a><span class="k">def</span> <span class="nf">unary_unary_rpc_method_handler</span><span class="p">(</span><span class="n">behavior</span><span class="p">,</span>
  1222. <span class="n">request_deserializer</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
  1223. <span class="n">response_serializer</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
  1224. <span class="sd">&quot;&quot;&quot;Creates an RpcMethodHandler for a unary-unary RPC method.</span>
  1225. <span class="sd"> Args:</span>
  1226. <span class="sd"> behavior: The implementation of an RPC that accepts one request</span>
  1227. <span class="sd"> and returns one response.</span>
  1228. <span class="sd"> request_deserializer: An optional :term:`deserializer` for request deserialization.</span>
  1229. <span class="sd"> response_serializer: An optional :term:`serializer` for response serialization.</span>
  1230. <span class="sd"> Returns:</span>
  1231. <span class="sd"> An RpcMethodHandler object that is typically used by grpc.Server.</span>
  1232. <span class="sd"> &quot;&quot;&quot;</span>
  1233. <span class="kn">from</span> <span class="nn">grpc</span> <span class="kn">import</span> <span class="n">_utilities</span> <span class="c1"># pylint: disable=cyclic-import</span>
  1234. <span class="k">return</span> <span class="n">_utilities</span><span class="o">.</span><span class="n">RpcMethodHandler</span><span class="p">(</span><span class="kc">False</span><span class="p">,</span> <span class="kc">False</span><span class="p">,</span> <span class="n">request_deserializer</span><span class="p">,</span>
  1235. <span class="n">response_serializer</span><span class="p">,</span> <span class="n">behavior</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span>
  1236. <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span></div>
  1237. <div class="viewcode-block" id="unary_stream_rpc_method_handler"><a class="viewcode-back" href="../grpc.html#grpc.unary_stream_rpc_method_handler">[docs]</a><span class="k">def</span> <span class="nf">unary_stream_rpc_method_handler</span><span class="p">(</span><span class="n">behavior</span><span class="p">,</span>
  1238. <span class="n">request_deserializer</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
  1239. <span class="n">response_serializer</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
  1240. <span class="sd">&quot;&quot;&quot;Creates an RpcMethodHandler for a unary-stream RPC method.</span>
  1241. <span class="sd"> Args:</span>
  1242. <span class="sd"> behavior: The implementation of an RPC that accepts one request</span>
  1243. <span class="sd"> and returns an iterator of response values.</span>
  1244. <span class="sd"> request_deserializer: An optional :term:`deserializer` for request deserialization.</span>
  1245. <span class="sd"> response_serializer: An optional :term:`serializer` for response serialization.</span>
  1246. <span class="sd"> Returns:</span>
  1247. <span class="sd"> An RpcMethodHandler object that is typically used by grpc.Server.</span>
  1248. <span class="sd"> &quot;&quot;&quot;</span>
  1249. <span class="kn">from</span> <span class="nn">grpc</span> <span class="kn">import</span> <span class="n">_utilities</span> <span class="c1"># pylint: disable=cyclic-import</span>
  1250. <span class="k">return</span> <span class="n">_utilities</span><span class="o">.</span><span class="n">RpcMethodHandler</span><span class="p">(</span><span class="kc">False</span><span class="p">,</span> <span class="kc">True</span><span class="p">,</span> <span class="n">request_deserializer</span><span class="p">,</span>
  1251. <span class="n">response_serializer</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">behavior</span><span class="p">,</span>
  1252. <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span></div>
  1253. <div class="viewcode-block" id="stream_unary_rpc_method_handler"><a class="viewcode-back" href="../grpc.html#grpc.stream_unary_rpc_method_handler">[docs]</a><span class="k">def</span> <span class="nf">stream_unary_rpc_method_handler</span><span class="p">(</span><span class="n">behavior</span><span class="p">,</span>
  1254. <span class="n">request_deserializer</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
  1255. <span class="n">response_serializer</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
  1256. <span class="sd">&quot;&quot;&quot;Creates an RpcMethodHandler for a stream-unary RPC method.</span>
  1257. <span class="sd"> Args:</span>
  1258. <span class="sd"> behavior: The implementation of an RPC that accepts an iterator of</span>
  1259. <span class="sd"> request values and returns a single response value.</span>
  1260. <span class="sd"> request_deserializer: An optional :term:`deserializer` for request deserialization.</span>
  1261. <span class="sd"> response_serializer: An optional :term:`serializer` for response serialization.</span>
  1262. <span class="sd"> Returns:</span>
  1263. <span class="sd"> An RpcMethodHandler object that is typically used by grpc.Server.</span>
  1264. <span class="sd"> &quot;&quot;&quot;</span>
  1265. <span class="kn">from</span> <span class="nn">grpc</span> <span class="kn">import</span> <span class="n">_utilities</span> <span class="c1"># pylint: disable=cyclic-import</span>
  1266. <span class="k">return</span> <span class="n">_utilities</span><span class="o">.</span><span class="n">RpcMethodHandler</span><span class="p">(</span><span class="kc">True</span><span class="p">,</span> <span class="kc">False</span><span class="p">,</span> <span class="n">request_deserializer</span><span class="p">,</span>
  1267. <span class="n">response_serializer</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span>
  1268. <span class="n">behavior</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span></div>
  1269. <div class="viewcode-block" id="stream_stream_rpc_method_handler"><a class="viewcode-back" href="../grpc.html#grpc.stream_stream_rpc_method_handler">[docs]</a><span class="k">def</span> <span class="nf">stream_stream_rpc_method_handler</span><span class="p">(</span><span class="n">behavior</span><span class="p">,</span>
  1270. <span class="n">request_deserializer</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
  1271. <span class="n">response_serializer</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
  1272. <span class="sd">&quot;&quot;&quot;Creates an RpcMethodHandler for a stream-stream RPC method.</span>
  1273. <span class="sd"> Args:</span>
  1274. <span class="sd"> behavior: The implementation of an RPC that accepts an iterator of</span>
  1275. <span class="sd"> request values and returns an iterator of response values.</span>
  1276. <span class="sd"> request_deserializer: An optional :term:`deserializer` for request deserialization.</span>
  1277. <span class="sd"> response_serializer: An optional :term:`serializer` for response serialization.</span>
  1278. <span class="sd"> Returns:</span>
  1279. <span class="sd"> An RpcMethodHandler object that is typically used by grpc.Server.</span>
  1280. <span class="sd"> &quot;&quot;&quot;</span>
  1281. <span class="kn">from</span> <span class="nn">grpc</span> <span class="kn">import</span> <span class="n">_utilities</span> <span class="c1"># pylint: disable=cyclic-import</span>
  1282. <span class="k">return</span> <span class="n">_utilities</span><span class="o">.</span><span class="n">RpcMethodHandler</span><span class="p">(</span><span class="kc">True</span><span class="p">,</span> <span class="kc">True</span><span class="p">,</span> <span class="n">request_deserializer</span><span class="p">,</span>
  1283. <span class="n">response_serializer</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span>
  1284. <span class="n">behavior</span><span class="p">)</span></div>
  1285. <div class="viewcode-block" id="method_handlers_generic_handler"><a class="viewcode-back" href="../grpc.html#grpc.method_handlers_generic_handler">[docs]</a><span class="k">def</span> <span class="nf">method_handlers_generic_handler</span><span class="p">(</span><span class="n">service</span><span class="p">,</span> <span class="n">method_handlers</span><span class="p">):</span>
  1286. <span class="sd">&quot;&quot;&quot;Creates a GenericRpcHandler from RpcMethodHandlers.</span>
  1287. <span class="sd"> Args:</span>
  1288. <span class="sd"> service: The name of the service that is implemented by the</span>
  1289. <span class="sd"> method_handlers.</span>
  1290. <span class="sd"> method_handlers: A dictionary that maps method names to corresponding</span>
  1291. <span class="sd"> RpcMethodHandler.</span>
  1292. <span class="sd"> Returns:</span>
  1293. <span class="sd"> A GenericRpcHandler. This is typically added to the grpc.Server object</span>
  1294. <span class="sd"> with add_generic_rpc_handlers() before starting the server.</span>
  1295. <span class="sd"> &quot;&quot;&quot;</span>
  1296. <span class="kn">from</span> <span class="nn">grpc</span> <span class="kn">import</span> <span class="n">_utilities</span> <span class="c1"># pylint: disable=cyclic-import</span>
  1297. <span class="k">return</span> <span class="n">_utilities</span><span class="o">.</span><span class="n">DictionaryGenericHandler</span><span class="p">(</span><span class="n">service</span><span class="p">,</span> <span class="n">method_handlers</span><span class="p">)</span></div>
  1298. <div class="viewcode-block" id="ssl_channel_credentials"><a class="viewcode-back" href="../grpc.html#grpc.ssl_channel_credentials">[docs]</a><span class="k">def</span> <span class="nf">ssl_channel_credentials</span><span class="p">(</span><span class="n">root_certificates</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
  1299. <span class="n">private_key</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
  1300. <span class="n">certificate_chain</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
  1301. <span class="sd">&quot;&quot;&quot;Creates a ChannelCredentials for use with an SSL-enabled Channel.</span>
  1302. <span class="sd"> Args:</span>
  1303. <span class="sd"> root_certificates: The PEM-encoded root certificates as a byte string,</span>
  1304. <span class="sd"> or None to retrieve them from a default location chosen by gRPC</span>
  1305. <span class="sd"> runtime.</span>
  1306. <span class="sd"> private_key: The PEM-encoded private key as a byte string, or None if no</span>
  1307. <span class="sd"> private key should be used.</span>
  1308. <span class="sd"> certificate_chain: The PEM-encoded certificate chain as a byte string</span>
  1309. <span class="sd"> to use or None if no certificate chain should be used.</span>
  1310. <span class="sd"> Returns:</span>
  1311. <span class="sd"> A ChannelCredentials for use with an SSL-enabled Channel.</span>
  1312. <span class="sd"> &quot;&quot;&quot;</span>
  1313. <span class="k">return</span> <span class="n">ChannelCredentials</span><span class="p">(</span>
  1314. <span class="n">_cygrpc</span><span class="o">.</span><span class="n">SSLChannelCredentials</span><span class="p">(</span><span class="n">root_certificates</span><span class="p">,</span> <span class="n">private_key</span><span class="p">,</span>
  1315. <span class="n">certificate_chain</span><span class="p">))</span></div>
  1316. <span class="k">def</span> <span class="nf">xds_channel_credentials</span><span class="p">(</span><span class="n">fallback_credentials</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
  1317. <span class="sd">&quot;&quot;&quot;Creates a ChannelCredentials for use with xDS. This is an EXPERIMENTAL</span>
  1318. <span class="sd"> API.</span>
  1319. <span class="sd"> Args:</span>
  1320. <span class="sd"> fallback_credentials: Credentials to use in case it is not possible to</span>
  1321. <span class="sd"> establish a secure connection via xDS. If no fallback_credentials</span>
  1322. <span class="sd"> argument is supplied, a default SSLChannelCredentials is used.</span>
  1323. <span class="sd"> &quot;&quot;&quot;</span>
  1324. <span class="n">fallback_credentials</span> <span class="o">=</span> <span class="n">ssl_channel_credentials</span><span class="p">(</span>
  1325. <span class="p">)</span> <span class="k">if</span> <span class="n">fallback_credentials</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">fallback_credentials</span>
  1326. <span class="k">return</span> <span class="n">ChannelCredentials</span><span class="p">(</span>
  1327. <span class="n">_cygrpc</span><span class="o">.</span><span class="n">XDSChannelCredentials</span><span class="p">(</span><span class="n">fallback_credentials</span><span class="o">.</span><span class="n">_credentials</span><span class="p">))</span>
  1328. <div class="viewcode-block" id="metadata_call_credentials"><a class="viewcode-back" href="../grpc.html#grpc.metadata_call_credentials">[docs]</a><span class="k">def</span> <span class="nf">metadata_call_credentials</span><span class="p">(</span><span class="n">metadata_plugin</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
  1329. <span class="sd">&quot;&quot;&quot;Construct CallCredentials from an AuthMetadataPlugin.</span>
  1330. <span class="sd"> Args:</span>
  1331. <span class="sd"> metadata_plugin: An AuthMetadataPlugin to use for authentication.</span>
  1332. <span class="sd"> name: An optional name for the plugin.</span>
  1333. <span class="sd"> Returns:</span>
  1334. <span class="sd"> A CallCredentials.</span>
  1335. <span class="sd"> &quot;&quot;&quot;</span>
  1336. <span class="kn">from</span> <span class="nn">grpc</span> <span class="kn">import</span> <span class="n">_plugin_wrapping</span> <span class="c1"># pylint: disable=cyclic-import</span>
  1337. <span class="k">return</span> <span class="n">_plugin_wrapping</span><span class="o">.</span><span class="n">metadata_plugin_call_credentials</span><span class="p">(</span>
  1338. <span class="n">metadata_plugin</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span></div>
  1339. <div class="viewcode-block" id="access_token_call_credentials"><a class="viewcode-back" href="../grpc.html#grpc.access_token_call_credentials">[docs]</a><span class="k">def</span> <span class="nf">access_token_call_credentials</span><span class="p">(</span><span class="n">access_token</span><span class="p">):</span>
  1340. <span class="sd">&quot;&quot;&quot;Construct CallCredentials from an access token.</span>
  1341. <span class="sd"> Args:</span>
  1342. <span class="sd"> access_token: A string to place directly in the http request</span>
  1343. <span class="sd"> authorization header, for example</span>
  1344. <span class="sd"> &quot;authorization: Bearer &lt;access_token&gt;&quot;.</span>
  1345. <span class="sd"> Returns:</span>
  1346. <span class="sd"> A CallCredentials.</span>
  1347. <span class="sd"> &quot;&quot;&quot;</span>
  1348. <span class="kn">from</span> <span class="nn">grpc</span> <span class="kn">import</span> <span class="n">_auth</span> <span class="c1"># pylint: disable=cyclic-import</span>
  1349. <span class="kn">from</span> <span class="nn">grpc</span> <span class="kn">import</span> <span class="n">_plugin_wrapping</span> <span class="c1"># pylint: disable=cyclic-import</span>
  1350. <span class="k">return</span> <span class="n">_plugin_wrapping</span><span class="o">.</span><span class="n">metadata_plugin_call_credentials</span><span class="p">(</span>
  1351. <span class="n">_auth</span><span class="o">.</span><span class="n">AccessTokenAuthMetadataPlugin</span><span class="p">(</span><span class="n">access_token</span><span class="p">),</span> <span class="kc">None</span><span class="p">)</span></div>
  1352. <div class="viewcode-block" id="composite_call_credentials"><a class="viewcode-back" href="../grpc.html#grpc.composite_call_credentials">[docs]</a><span class="k">def</span> <span class="nf">composite_call_credentials</span><span class="p">(</span><span class="o">*</span><span class="n">call_credentials</span><span class="p">):</span>
  1353. <span class="sd">&quot;&quot;&quot;Compose multiple CallCredentials to make a new CallCredentials.</span>
  1354. <span class="sd"> Args:</span>
  1355. <span class="sd"> *call_credentials: At least two CallCredentials objects.</span>
  1356. <span class="sd"> Returns:</span>
  1357. <span class="sd"> A CallCredentials object composed of the given CallCredentials objects.</span>
  1358. <span class="sd"> &quot;&quot;&quot;</span>
  1359. <span class="k">return</span> <span class="n">CallCredentials</span><span class="p">(</span>
  1360. <span class="n">_cygrpc</span><span class="o">.</span><span class="n">CompositeCallCredentials</span><span class="p">(</span>
  1361. <span class="nb">tuple</span><span class="p">(</span><span class="n">single_call_credentials</span><span class="o">.</span><span class="n">_credentials</span>
  1362. <span class="k">for</span> <span class="n">single_call_credentials</span> <span class="ow">in</span> <span class="n">call_credentials</span><span class="p">)))</span></div>
  1363. <div class="viewcode-block" id="composite_channel_credentials"><a class="viewcode-back" href="../grpc.html#grpc.composite_channel_credentials">[docs]</a><span class="k">def</span> <span class="nf">composite_channel_credentials</span><span class="p">(</span><span class="n">channel_credentials</span><span class="p">,</span> <span class="o">*</span><span class="n">call_credentials</span><span class="p">):</span>
  1364. <span class="sd">&quot;&quot;&quot;Compose a ChannelCredentials and one or more CallCredentials objects.</span>
  1365. <span class="sd"> Args:</span>
  1366. <span class="sd"> channel_credentials: A ChannelCredentials object.</span>
  1367. <span class="sd"> *call_credentials: One or more CallCredentials objects.</span>
  1368. <span class="sd"> Returns:</span>
  1369. <span class="sd"> A ChannelCredentials composed of the given ChannelCredentials and</span>
  1370. <span class="sd"> CallCredentials objects.</span>
  1371. <span class="sd"> &quot;&quot;&quot;</span>
  1372. <span class="k">return</span> <span class="n">ChannelCredentials</span><span class="p">(</span>
  1373. <span class="n">_cygrpc</span><span class="o">.</span><span class="n">CompositeChannelCredentials</span><span class="p">(</span>
  1374. <span class="nb">tuple</span><span class="p">(</span><span class="n">single_call_credentials</span><span class="o">.</span><span class="n">_credentials</span>
  1375. <span class="k">for</span> <span class="n">single_call_credentials</span> <span class="ow">in</span> <span class="n">call_credentials</span><span class="p">),</span>
  1376. <span class="n">channel_credentials</span><span class="o">.</span><span class="n">_credentials</span><span class="p">))</span></div>
  1377. <div class="viewcode-block" id="ssl_server_credentials"><a class="viewcode-back" href="../grpc.html#grpc.ssl_server_credentials">[docs]</a><span class="k">def</span> <span class="nf">ssl_server_credentials</span><span class="p">(</span><span class="n">private_key_certificate_chain_pairs</span><span class="p">,</span>
  1378. <span class="n">root_certificates</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
  1379. <span class="n">require_client_auth</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
  1380. <span class="sd">&quot;&quot;&quot;Creates a ServerCredentials for use with an SSL-enabled Server.</span>
  1381. <span class="sd"> Args:</span>
  1382. <span class="sd"> private_key_certificate_chain_pairs: A list of pairs of the form</span>
  1383. <span class="sd"> [PEM-encoded private key, PEM-encoded certificate chain].</span>
  1384. <span class="sd"> root_certificates: An optional byte string of PEM-encoded client root</span>
  1385. <span class="sd"> certificates that the server will use to verify client authentication.</span>
  1386. <span class="sd"> If omitted, require_client_auth must also be False.</span>
  1387. <span class="sd"> require_client_auth: A boolean indicating whether or not to require</span>
  1388. <span class="sd"> clients to be authenticated. May only be True if root_certificates</span>
  1389. <span class="sd"> is not None.</span>
  1390. <span class="sd"> Returns:</span>
  1391. <span class="sd"> A ServerCredentials for use with an SSL-enabled Server. Typically, this</span>
  1392. <span class="sd"> object is an argument to add_secure_port() method during server setup.</span>
  1393. <span class="sd"> &quot;&quot;&quot;</span>
  1394. <span class="k">if</span> <span class="ow">not</span> <span class="n">private_key_certificate_chain_pairs</span><span class="p">:</span>
  1395. <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
  1396. <span class="s1">&#39;At least one private key-certificate chain pair is required!&#39;</span><span class="p">)</span>
  1397. <span class="k">elif</span> <span class="n">require_client_auth</span> <span class="ow">and</span> <span class="n">root_certificates</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
  1398. <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
  1399. <span class="s1">&#39;Illegal to require client auth without providing root certificates!&#39;</span>
  1400. <span class="p">)</span>
  1401. <span class="k">else</span><span class="p">:</span>
  1402. <span class="k">return</span> <span class="n">ServerCredentials</span><span class="p">(</span>
  1403. <span class="n">_cygrpc</span><span class="o">.</span><span class="n">server_credentials_ssl</span><span class="p">(</span><span class="n">root_certificates</span><span class="p">,</span> <span class="p">[</span>
  1404. <span class="n">_cygrpc</span><span class="o">.</span><span class="n">SslPemKeyCertPair</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">pem</span><span class="p">)</span>
  1405. <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">pem</span> <span class="ow">in</span> <span class="n">private_key_certificate_chain_pairs</span>
  1406. <span class="p">],</span> <span class="n">require_client_auth</span><span class="p">))</span></div>
  1407. <span class="k">def</span> <span class="nf">xds_server_credentials</span><span class="p">(</span><span class="n">fallback_credentials</span><span class="p">):</span>
  1408. <span class="sd">&quot;&quot;&quot;Creates a ServerCredentials for use with xDS. This is an EXPERIMENTAL</span>
  1409. <span class="sd"> API.</span>
  1410. <span class="sd"> Args:</span>
  1411. <span class="sd"> fallback_credentials: Credentials to use in case it is not possible to</span>
  1412. <span class="sd"> establish a secure connection via xDS. No default value is provided.</span>
  1413. <span class="sd"> &quot;&quot;&quot;</span>
  1414. <span class="k">return</span> <span class="n">ServerCredentials</span><span class="p">(</span>
  1415. <span class="n">_cygrpc</span><span class="o">.</span><span class="n">xds_server_credentials</span><span class="p">(</span><span class="n">fallback_credentials</span><span class="o">.</span><span class="n">_credentials</span><span class="p">))</span>
  1416. <span class="k">def</span> <span class="nf">insecure_server_credentials</span><span class="p">():</span>
  1417. <span class="sd">&quot;&quot;&quot;Creates a credentials object directing the server to use no credentials.</span>
  1418. <span class="sd"> This is an EXPERIMENTAL API.</span>
  1419. <span class="sd"> This object cannot be used directly in a call to `add_secure_port`.</span>
  1420. <span class="sd"> Instead, it should be used to construct other credentials objects, e.g.</span>
  1421. <span class="sd"> with xds_server_credentials.</span>
  1422. <span class="sd"> &quot;&quot;&quot;</span>
  1423. <span class="k">return</span> <span class="n">ServerCredentials</span><span class="p">(</span><span class="n">_cygrpc</span><span class="o">.</span><span class="n">insecure_server_credentials</span><span class="p">())</span>
  1424. <div class="viewcode-block" id="ssl_server_certificate_configuration"><a class="viewcode-back" href="../grpc.html#grpc.ssl_server_certificate_configuration">[docs]</a><span class="k">def</span> <span class="nf">ssl_server_certificate_configuration</span><span class="p">(</span><span class="n">private_key_certificate_chain_pairs</span><span class="p">,</span>
  1425. <span class="n">root_certificates</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
  1426. <span class="sd">&quot;&quot;&quot;Creates a ServerCertificateConfiguration for use with a Server.</span>
  1427. <span class="sd"> Args:</span>
  1428. <span class="sd"> private_key_certificate_chain_pairs: A collection of pairs of</span>
  1429. <span class="sd"> the form [PEM-encoded private key, PEM-encoded certificate</span>
  1430. <span class="sd"> chain].</span>
  1431. <span class="sd"> root_certificates: An optional byte string of PEM-encoded client root</span>
  1432. <span class="sd"> certificates that the server will use to verify client authentication.</span>
  1433. <span class="sd"> Returns:</span>
  1434. <span class="sd"> A ServerCertificateConfiguration that can be returned in the certificate</span>
  1435. <span class="sd"> configuration fetching callback.</span>
  1436. <span class="sd"> &quot;&quot;&quot;</span>
  1437. <span class="k">if</span> <span class="n">private_key_certificate_chain_pairs</span><span class="p">:</span>
  1438. <span class="k">return</span> <span class="n">ServerCertificateConfiguration</span><span class="p">(</span>
  1439. <span class="n">_cygrpc</span><span class="o">.</span><span class="n">server_certificate_config_ssl</span><span class="p">(</span><span class="n">root_certificates</span><span class="p">,</span> <span class="p">[</span>
  1440. <span class="n">_cygrpc</span><span class="o">.</span><span class="n">SslPemKeyCertPair</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">pem</span><span class="p">)</span>
  1441. <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">pem</span> <span class="ow">in</span> <span class="n">private_key_certificate_chain_pairs</span>
  1442. <span class="p">]))</span>
  1443. <span class="k">else</span><span class="p">:</span>
  1444. <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
  1445. <span class="s1">&#39;At least one private key-certificate chain pair is required!&#39;</span><span class="p">)</span></div>
  1446. <div class="viewcode-block" id="dynamic_ssl_server_credentials"><a class="viewcode-back" href="../grpc.html#grpc.dynamic_ssl_server_credentials">[docs]</a><span class="k">def</span> <span class="nf">dynamic_ssl_server_credentials</span><span class="p">(</span><span class="n">initial_certificate_configuration</span><span class="p">,</span>
  1447. <span class="n">certificate_configuration_fetcher</span><span class="p">,</span>
  1448. <span class="n">require_client_authentication</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
  1449. <span class="sd">&quot;&quot;&quot;Creates a ServerCredentials for use with an SSL-enabled Server.</span>
  1450. <span class="sd"> Args:</span>
  1451. <span class="sd"> initial_certificate_configuration (ServerCertificateConfiguration): The</span>
  1452. <span class="sd"> certificate configuration with which the server will be initialized.</span>
  1453. <span class="sd"> certificate_configuration_fetcher (callable): A callable that takes no</span>
  1454. <span class="sd"> arguments and should return a ServerCertificateConfiguration to</span>
  1455. <span class="sd"> replace the server&#39;s current certificate, or None for no change</span>
  1456. <span class="sd"> (i.e., the server will continue its current certificate</span>
  1457. <span class="sd"> config). The library will call this callback on *every* new</span>
  1458. <span class="sd"> client connection before starting the TLS handshake with the</span>
  1459. <span class="sd"> client, thus allowing the user application to optionally</span>
  1460. <span class="sd"> return a new ServerCertificateConfiguration that the server will then</span>
  1461. <span class="sd"> use for the handshake.</span>
  1462. <span class="sd"> require_client_authentication: A boolean indicating whether or not to</span>
  1463. <span class="sd"> require clients to be authenticated.</span>
  1464. <span class="sd"> Returns:</span>
  1465. <span class="sd"> A ServerCredentials.</span>
  1466. <span class="sd"> &quot;&quot;&quot;</span>
  1467. <span class="k">return</span> <span class="n">ServerCredentials</span><span class="p">(</span>
  1468. <span class="n">_cygrpc</span><span class="o">.</span><span class="n">server_credentials_ssl_dynamic_cert_config</span><span class="p">(</span>
  1469. <span class="n">initial_certificate_configuration</span><span class="p">,</span>
  1470. <span class="n">certificate_configuration_fetcher</span><span class="p">,</span> <span class="n">require_client_authentication</span><span class="p">))</span></div>
  1471. <div class="viewcode-block" id="LocalConnectionType"><a class="viewcode-back" href="../grpc.html#grpc.LocalConnectionType">[docs]</a><span class="nd">@enum</span><span class="o">.</span><span class="n">unique</span>
  1472. <span class="k">class</span> <span class="nc">LocalConnectionType</span><span class="p">(</span><span class="n">enum</span><span class="o">.</span><span class="n">Enum</span><span class="p">):</span>
  1473. <span class="sd">&quot;&quot;&quot;Types of local connection for local credential creation.</span>
  1474. <span class="sd"> Attributes:</span>
  1475. <span class="sd"> UDS: Unix domain socket connections</span>
  1476. <span class="sd"> LOCAL_TCP: Local TCP connections.</span>
  1477. <span class="sd"> &quot;&quot;&quot;</span>
  1478. <span class="n">UDS</span> <span class="o">=</span> <span class="n">_cygrpc</span><span class="o">.</span><span class="n">LocalConnectionType</span><span class="o">.</span><span class="n">uds</span>
  1479. <span class="n">LOCAL_TCP</span> <span class="o">=</span> <span class="n">_cygrpc</span><span class="o">.</span><span class="n">LocalConnectionType</span><span class="o">.</span><span class="n">local_tcp</span></div>
  1480. <div class="viewcode-block" id="local_channel_credentials"><a class="viewcode-back" href="../grpc.html#grpc.local_channel_credentials">[docs]</a><span class="k">def</span> <span class="nf">local_channel_credentials</span><span class="p">(</span><span class="n">local_connect_type</span><span class="o">=</span><span class="n">LocalConnectionType</span><span class="o">.</span><span class="n">LOCAL_TCP</span><span class="p">):</span>
  1481. <span class="sd">&quot;&quot;&quot;Creates a local ChannelCredentials used for local connections.</span>
  1482. <span class="sd"> This is an EXPERIMENTAL API.</span>
  1483. <span class="sd"> Local credentials are used by local TCP endpoints (e.g. localhost:10000)</span>
  1484. <span class="sd"> also UDS connections.</span>
  1485. <span class="sd"> The connections created by local channel credentials are not</span>
  1486. <span class="sd"> encrypted, but will be checked if they are local or not.</span>
  1487. <span class="sd"> The UDS connections are considered secure by providing peer authentication</span>
  1488. <span class="sd"> and data confidentiality while TCP connections are considered insecure.</span>
  1489. <span class="sd"> It is allowed to transmit call credentials over connections created by</span>
  1490. <span class="sd"> local channel credentials.</span>
  1491. <span class="sd"> Local channel credentials are useful for 1) eliminating insecure_channel usage;</span>
  1492. <span class="sd"> 2) enable unit testing for call credentials without setting up secrets.</span>
  1493. <span class="sd"> Args:</span>
  1494. <span class="sd"> local_connect_type: Local connection type (either</span>
  1495. <span class="sd"> grpc.LocalConnectionType.UDS or grpc.LocalConnectionType.LOCAL_TCP)</span>
  1496. <span class="sd"> Returns:</span>
  1497. <span class="sd"> A ChannelCredentials for use with a local Channel</span>
  1498. <span class="sd"> &quot;&quot;&quot;</span>
  1499. <span class="k">return</span> <span class="n">ChannelCredentials</span><span class="p">(</span>
  1500. <span class="n">_cygrpc</span><span class="o">.</span><span class="n">channel_credentials_local</span><span class="p">(</span><span class="n">local_connect_type</span><span class="o">.</span><span class="n">value</span><span class="p">))</span></div>
  1501. <div class="viewcode-block" id="local_server_credentials"><a class="viewcode-back" href="../grpc.html#grpc.local_server_credentials">[docs]</a><span class="k">def</span> <span class="nf">local_server_credentials</span><span class="p">(</span><span class="n">local_connect_type</span><span class="o">=</span><span class="n">LocalConnectionType</span><span class="o">.</span><span class="n">LOCAL_TCP</span><span class="p">):</span>
  1502. <span class="sd">&quot;&quot;&quot;Creates a local ServerCredentials used for local connections.</span>
  1503. <span class="sd"> This is an EXPERIMENTAL API.</span>
  1504. <span class="sd"> Local credentials are used by local TCP endpoints (e.g. localhost:10000)</span>
  1505. <span class="sd"> also UDS connections.</span>
  1506. <span class="sd"> The connections created by local server credentials are not</span>
  1507. <span class="sd"> encrypted, but will be checked if they are local or not.</span>
  1508. <span class="sd"> The UDS connections are considered secure by providing peer authentication</span>
  1509. <span class="sd"> and data confidentiality while TCP connections are considered insecure.</span>
  1510. <span class="sd"> It is allowed to transmit call credentials over connections created by local</span>
  1511. <span class="sd"> server credentials.</span>
  1512. <span class="sd"> Local server credentials are useful for 1) eliminating insecure_channel usage;</span>
  1513. <span class="sd"> 2) enable unit testing for call credentials without setting up secrets.</span>
  1514. <span class="sd"> Args:</span>
  1515. <span class="sd"> local_connect_type: Local connection type (either</span>
  1516. <span class="sd"> grpc.LocalConnectionType.UDS or grpc.LocalConnectionType.LOCAL_TCP)</span>
  1517. <span class="sd"> Returns:</span>
  1518. <span class="sd"> A ServerCredentials for use with a local Server</span>
  1519. <span class="sd"> &quot;&quot;&quot;</span>
  1520. <span class="k">return</span> <span class="n">ServerCredentials</span><span class="p">(</span>
  1521. <span class="n">_cygrpc</span><span class="o">.</span><span class="n">server_credentials_local</span><span class="p">(</span><span class="n">local_connect_type</span><span class="o">.</span><span class="n">value</span><span class="p">))</span></div>
  1522. <span class="k">def</span> <span class="nf">alts_channel_credentials</span><span class="p">(</span><span class="n">service_accounts</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
  1523. <span class="sd">&quot;&quot;&quot;Creates a ChannelCredentials for use with an ALTS-enabled Channel.</span>
  1524. <span class="sd"> This is an EXPERIMENTAL API.</span>
  1525. <span class="sd"> ALTS credentials API can only be used in GCP environment as it relies on</span>
  1526. <span class="sd"> handshaker service being available. For more info about ALTS see</span>
  1527. <span class="sd"> https://cloud.google.com/security/encryption-in-transit/application-layer-transport-security</span>
  1528. <span class="sd"> Args:</span>
  1529. <span class="sd"> service_accounts: A list of server identities accepted by the client.</span>
  1530. <span class="sd"> If target service accounts are provided and none of them matches the</span>
  1531. <span class="sd"> peer identity of the server, handshake will fail. The arg can be empty</span>
  1532. <span class="sd"> if the client does not have any information about trusted server</span>
  1533. <span class="sd"> identity.</span>
  1534. <span class="sd"> Returns:</span>
  1535. <span class="sd"> A ChannelCredentials for use with an ALTS-enabled Channel</span>
  1536. <span class="sd"> &quot;&quot;&quot;</span>
  1537. <span class="k">return</span> <span class="n">ChannelCredentials</span><span class="p">(</span>
  1538. <span class="n">_cygrpc</span><span class="o">.</span><span class="n">channel_credentials_alts</span><span class="p">(</span><span class="n">service_accounts</span> <span class="ow">or</span> <span class="p">[]))</span>
  1539. <span class="k">def</span> <span class="nf">alts_server_credentials</span><span class="p">():</span>
  1540. <span class="sd">&quot;&quot;&quot;Creates a ServerCredentials for use with an ALTS-enabled connection.</span>
  1541. <span class="sd"> This is an EXPERIMENTAL API.</span>
  1542. <span class="sd"> ALTS credentials API can only be used in GCP environment as it relies on</span>
  1543. <span class="sd"> handshaker service being available. For more info about ALTS see</span>
  1544. <span class="sd"> https://cloud.google.com/security/encryption-in-transit/application-layer-transport-security</span>
  1545. <span class="sd"> Returns:</span>
  1546. <span class="sd"> A ServerCredentials for use with an ALTS-enabled Server</span>
  1547. <span class="sd"> &quot;&quot;&quot;</span>
  1548. <span class="k">return</span> <span class="n">ServerCredentials</span><span class="p">(</span><span class="n">_cygrpc</span><span class="o">.</span><span class="n">server_credentials_alts</span><span class="p">())</span>
  1549. <div class="viewcode-block" id="compute_engine_channel_credentials"><a class="viewcode-back" href="../grpc.html#grpc.compute_engine_channel_credentials">[docs]</a><span class="k">def</span> <span class="nf">compute_engine_channel_credentials</span><span class="p">(</span><span class="n">call_credentials</span><span class="p">):</span>
  1550. <span class="sd">&quot;&quot;&quot;Creates a compute engine channel credential.</span>
  1551. <span class="sd"> This credential can only be used in a GCP environment as it relies on</span>
  1552. <span class="sd"> a handshaker service. For more info about ALTS, see</span>
  1553. <span class="sd"> https://cloud.google.com/security/encryption-in-transit/application-layer-transport-security</span>
  1554. <span class="sd"> This channel credential is expected to be used as part of a composite</span>
  1555. <span class="sd"> credential in conjunction with a call credentials that authenticates the</span>
  1556. <span class="sd"> VM&#39;s default service account. If used with any other sort of call</span>
  1557. <span class="sd"> credential, the connection may suddenly and unexpectedly begin failing RPCs.</span>
  1558. <span class="sd"> &quot;&quot;&quot;</span>
  1559. <span class="k">return</span> <span class="n">ChannelCredentials</span><span class="p">(</span>
  1560. <span class="n">_cygrpc</span><span class="o">.</span><span class="n">channel_credentials_compute_engine</span><span class="p">(</span>
  1561. <span class="n">call_credentials</span><span class="o">.</span><span class="n">_credentials</span><span class="p">))</span></div>
  1562. <div class="viewcode-block" id="channel_ready_future"><a class="viewcode-back" href="../grpc.html#grpc.channel_ready_future">[docs]</a><span class="k">def</span> <span class="nf">channel_ready_future</span><span class="p">(</span><span class="n">channel</span><span class="p">):</span>
  1563. <span class="sd">&quot;&quot;&quot;Creates a Future that tracks when a Channel is ready.</span>
  1564. <span class="sd"> Cancelling the Future does not affect the channel&#39;s state machine.</span>
  1565. <span class="sd"> It merely decouples the Future from channel state machine.</span>
  1566. <span class="sd"> Args:</span>
  1567. <span class="sd"> channel: A Channel object.</span>
  1568. <span class="sd"> Returns:</span>
  1569. <span class="sd"> A Future object that matures when the channel connectivity is</span>
  1570. <span class="sd"> ChannelConnectivity.READY.</span>
  1571. <span class="sd"> &quot;&quot;&quot;</span>
  1572. <span class="kn">from</span> <span class="nn">grpc</span> <span class="kn">import</span> <span class="n">_utilities</span> <span class="c1"># pylint: disable=cyclic-import</span>
  1573. <span class="k">return</span> <span class="n">_utilities</span><span class="o">.</span><span class="n">channel_ready_future</span><span class="p">(</span><span class="n">channel</span><span class="p">)</span></div>
  1574. <div class="viewcode-block" id="insecure_channel"><a class="viewcode-back" href="../grpc.html#grpc.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="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>
  1575. <span class="sd">&quot;&quot;&quot;Creates an insecure Channel to a server.</span>
  1576. <span class="sd"> The returned Channel is thread-safe.</span>
  1577. <span class="sd"> Args:</span>
  1578. <span class="sd"> target: The server address</span>
  1579. <span class="sd"> options: An optional list of key-value pairs (:term:`channel_arguments`</span>
  1580. <span class="sd"> in gRPC Core runtime) to configure the channel.</span>
  1581. <span class="sd"> compression: An optional value indicating the compression method to be</span>
  1582. <span class="sd"> used over the lifetime of the channel. This is an EXPERIMENTAL option.</span>
  1583. <span class="sd"> Returns:</span>
  1584. <span class="sd"> A Channel.</span>
  1585. <span class="sd"> &quot;&quot;&quot;</span>
  1586. <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>
  1587. <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>
  1588. <span class="n">compression</span><span class="p">)</span></div>
  1589. <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>
  1590. <span class="sd">&quot;&quot;&quot;Creates a secure Channel to a server.</span>
  1591. <span class="sd"> The returned Channel is thread-safe.</span>
  1592. <span class="sd"> Args:</span>
  1593. <span class="sd"> target: The server address.</span>
  1594. <span class="sd"> credentials: A ChannelCredentials instance.</span>
  1595. <span class="sd"> options: An optional list of key-value pairs (:term:`channel_arguments`</span>
  1596. <span class="sd"> in gRPC Core runtime) to configure the channel.</span>
  1597. <span class="sd"> compression: An optional value indicating the compression method to be</span>
  1598. <span class="sd"> used over the lifetime of the channel. This is an EXPERIMENTAL option.</span>
  1599. <span class="sd"> Returns:</span>
  1600. <span class="sd"> A Channel.</span>
  1601. <span class="sd"> &quot;&quot;&quot;</span>
  1602. <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>
  1603. <span class="kn">from</span> <span class="nn">grpc.experimental</span> <span class="kn">import</span> <span class="n">_insecure_channel_credentials</span>
  1604. <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>
  1605. <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
  1606. <span class="s2">&quot;secure_channel cannot be called with insecure credentials.&quot;</span> <span class="o">+</span>
  1607. <span class="s2">&quot; Call insecure_channel instead.&quot;</span><span class="p">)</span>
  1608. <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>
  1609. <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>
  1610. <div class="viewcode-block" id="intercept_channel"><a class="viewcode-back" href="../grpc.html#grpc.intercept_channel">[docs]</a><span class="k">def</span> <span class="nf">intercept_channel</span><span class="p">(</span><span class="n">channel</span><span class="p">,</span> <span class="o">*</span><span class="n">interceptors</span><span class="p">):</span>
  1611. <span class="sd">&quot;&quot;&quot;Intercepts a channel through a set of interceptors.</span>
  1612. <span class="sd"> This is an EXPERIMENTAL API.</span>
  1613. <span class="sd"> Args:</span>
  1614. <span class="sd"> channel: A Channel.</span>
  1615. <span class="sd"> interceptors: Zero or more objects of type</span>
  1616. <span class="sd"> UnaryUnaryClientInterceptor,</span>
  1617. <span class="sd"> UnaryStreamClientInterceptor,</span>
  1618. <span class="sd"> StreamUnaryClientInterceptor, or</span>
  1619. <span class="sd"> StreamStreamClientInterceptor.</span>
  1620. <span class="sd"> Interceptors are given control in the order they are listed.</span>
  1621. <span class="sd"> Returns:</span>
  1622. <span class="sd"> A Channel that intercepts each invocation via the provided interceptors.</span>
  1623. <span class="sd"> Raises:</span>
  1624. <span class="sd"> TypeError: If interceptor does not derive from any of</span>
  1625. <span class="sd"> UnaryUnaryClientInterceptor,</span>
  1626. <span class="sd"> UnaryStreamClientInterceptor,</span>
  1627. <span class="sd"> StreamUnaryClientInterceptor, or</span>
  1628. <span class="sd"> StreamStreamClientInterceptor.</span>
  1629. <span class="sd"> &quot;&quot;&quot;</span>
  1630. <span class="kn">from</span> <span class="nn">grpc</span> <span class="kn">import</span> <span class="n">_interceptor</span> <span class="c1"># pylint: disable=cyclic-import</span>
  1631. <span class="k">return</span> <span class="n">_interceptor</span><span class="o">.</span><span class="n">intercept_channel</span><span class="p">(</span><span class="n">channel</span><span class="p">,</span> <span class="o">*</span><span class="n">interceptors</span><span class="p">)</span></div>
  1632. <div class="viewcode-block" id="server"><a class="viewcode-back" href="../grpc.html#grpc.server">[docs]</a><span class="k">def</span> <span class="nf">server</span><span class="p">(</span><span class="n">thread_pool</span><span class="p">,</span>
  1633. <span class="n">handlers</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
  1634. <span class="n">interceptors</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
  1635. <span class="n">options</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
  1636. <span class="n">maximum_concurrent_rpcs</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
  1637. <span class="n">compression</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
  1638. <span class="n">xds</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
  1639. <span class="sd">&quot;&quot;&quot;Creates a Server with which RPCs can be serviced.</span>
  1640. <span class="sd"> Args:</span>
  1641. <span class="sd"> thread_pool: A futures.ThreadPoolExecutor to be used by the Server</span>
  1642. <span class="sd"> to execute RPC handlers.</span>
  1643. <span class="sd"> handlers: An optional list of GenericRpcHandlers used for executing RPCs.</span>
  1644. <span class="sd"> More handlers may be added by calling add_generic_rpc_handlers any time</span>
  1645. <span class="sd"> before the server is started.</span>
  1646. <span class="sd"> interceptors: An optional list of ServerInterceptor objects that observe</span>
  1647. <span class="sd"> and optionally manipulate the incoming RPCs before handing them over to</span>
  1648. <span class="sd"> handlers. The interceptors are given control in the order they are</span>
  1649. <span class="sd"> specified. This is an EXPERIMENTAL API.</span>
  1650. <span class="sd"> options: An optional list of key-value pairs (:term:`channel_arguments` in gRPC runtime)</span>
  1651. <span class="sd"> to configure the channel.</span>
  1652. <span class="sd"> maximum_concurrent_rpcs: The maximum number of concurrent RPCs this server</span>
  1653. <span class="sd"> will service before returning RESOURCE_EXHAUSTED status, or None to</span>
  1654. <span class="sd"> indicate no limit.</span>
  1655. <span class="sd"> compression: An element of grpc.compression, e.g.</span>
  1656. <span class="sd"> grpc.compression.Gzip. This compression algorithm will be used for the</span>
  1657. <span class="sd"> lifetime of the server unless overridden. This is an EXPERIMENTAL option.</span>
  1658. <span class="sd"> xds: If set to true, retrieves server configuration via xDS. This is an</span>
  1659. <span class="sd"> EXPERIMENTAL option.</span>
  1660. <span class="sd"> Returns:</span>
  1661. <span class="sd"> A Server object.</span>
  1662. <span class="sd"> &quot;&quot;&quot;</span>
  1663. <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>
  1664. <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>
  1665. <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>
  1666. <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>
  1667. <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>
  1668. <span class="n">maximum_concurrent_rpcs</span><span class="p">,</span> <span class="n">compression</span><span class="p">,</span> <span class="n">xds</span><span class="p">)</span></div>
  1669. <span class="nd">@contextlib</span><span class="o">.</span><span class="n">contextmanager</span>
  1670. <span class="k">def</span> <span class="nf">_create_servicer_context</span><span class="p">(</span><span class="n">rpc_event</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">request_deserializer</span><span class="p">):</span>
  1671. <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>
  1672. <span class="n">context</span> <span class="o">=</span> <span class="n">_server</span><span class="o">.</span><span class="n">_Context</span><span class="p">(</span><span class="n">rpc_event</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">request_deserializer</span><span class="p">)</span>
  1673. <span class="k">yield</span> <span class="n">context</span>
  1674. <span class="n">context</span><span class="o">.</span><span class="n">_finalize_state</span><span class="p">()</span> <span class="c1"># pylint: disable=protected-access</span>
  1675. <div class="viewcode-block" id="Compression"><a class="viewcode-back" href="../grpc.html#grpc.Compression">[docs]</a><span class="nd">@enum</span><span class="o">.</span><span class="n">unique</span>
  1676. <span class="k">class</span> <span class="nc">Compression</span><span class="p">(</span><span class="n">enum</span><span class="o">.</span><span class="n">IntEnum</span><span class="p">):</span>
  1677. <span class="sd">&quot;&quot;&quot;Indicates the compression method to be used for an RPC.</span>
  1678. <span class="sd"> This enumeration is part of an EXPERIMENTAL API.</span>
  1679. <span class="sd"> Attributes:</span>
  1680. <span class="sd"> NoCompression: Do not use compression algorithm.</span>
  1681. <span class="sd"> Deflate: Use &quot;Deflate&quot; compression algorithm.</span>
  1682. <span class="sd"> Gzip: Use &quot;Gzip&quot; compression algorithm.</span>
  1683. <span class="sd"> &quot;&quot;&quot;</span>
  1684. <span class="n">NoCompression</span> <span class="o">=</span> <span class="n">_compression</span><span class="o">.</span><span class="n">NoCompression</span>
  1685. <span class="n">Deflate</span> <span class="o">=</span> <span class="n">_compression</span><span class="o">.</span><span class="n">Deflate</span>
  1686. <span class="n">Gzip</span> <span class="o">=</span> <span class="n">_compression</span><span class="o">.</span><span class="n">Gzip</span></div>
  1687. <span class="kn">from</span> <span class="nn">grpc._runtime_protos</span> <span class="kn">import</span> <span class="n">protos</span><span class="p">,</span> <span class="n">services</span><span class="p">,</span> <span class="n">protos_and_services</span> <span class="c1"># pylint: disable=wrong-import-position</span>
  1688. <span class="c1">################################### __all__ #################################</span>
  1689. <span class="n">__all__</span> <span class="o">=</span> <span class="p">(</span>
  1690. <span class="s1">&#39;FutureTimeoutError&#39;</span><span class="p">,</span>
  1691. <span class="s1">&#39;FutureCancelledError&#39;</span><span class="p">,</span>
  1692. <span class="s1">&#39;Future&#39;</span><span class="p">,</span>
  1693. <span class="s1">&#39;ChannelConnectivity&#39;</span><span class="p">,</span>
  1694. <span class="s1">&#39;StatusCode&#39;</span><span class="p">,</span>
  1695. <span class="s1">&#39;Status&#39;</span><span class="p">,</span>
  1696. <span class="s1">&#39;RpcError&#39;</span><span class="p">,</span>
  1697. <span class="s1">&#39;RpcContext&#39;</span><span class="p">,</span>
  1698. <span class="s1">&#39;Call&#39;</span><span class="p">,</span>
  1699. <span class="s1">&#39;ChannelCredentials&#39;</span><span class="p">,</span>
  1700. <span class="s1">&#39;CallCredentials&#39;</span><span class="p">,</span>
  1701. <span class="s1">&#39;AuthMetadataContext&#39;</span><span class="p">,</span>
  1702. <span class="s1">&#39;AuthMetadataPluginCallback&#39;</span><span class="p">,</span>
  1703. <span class="s1">&#39;AuthMetadataPlugin&#39;</span><span class="p">,</span>
  1704. <span class="s1">&#39;Compression&#39;</span><span class="p">,</span>
  1705. <span class="s1">&#39;ClientCallDetails&#39;</span><span class="p">,</span>
  1706. <span class="s1">&#39;ServerCertificateConfiguration&#39;</span><span class="p">,</span>
  1707. <span class="s1">&#39;ServerCredentials&#39;</span><span class="p">,</span>
  1708. <span class="s1">&#39;LocalConnectionType&#39;</span><span class="p">,</span>
  1709. <span class="s1">&#39;UnaryUnaryMultiCallable&#39;</span><span class="p">,</span>
  1710. <span class="s1">&#39;UnaryStreamMultiCallable&#39;</span><span class="p">,</span>
  1711. <span class="s1">&#39;StreamUnaryMultiCallable&#39;</span><span class="p">,</span>
  1712. <span class="s1">&#39;StreamStreamMultiCallable&#39;</span><span class="p">,</span>
  1713. <span class="s1">&#39;UnaryUnaryClientInterceptor&#39;</span><span class="p">,</span>
  1714. <span class="s1">&#39;UnaryStreamClientInterceptor&#39;</span><span class="p">,</span>
  1715. <span class="s1">&#39;StreamUnaryClientInterceptor&#39;</span><span class="p">,</span>
  1716. <span class="s1">&#39;StreamStreamClientInterceptor&#39;</span><span class="p">,</span>
  1717. <span class="s1">&#39;Channel&#39;</span><span class="p">,</span>
  1718. <span class="s1">&#39;ServicerContext&#39;</span><span class="p">,</span>
  1719. <span class="s1">&#39;RpcMethodHandler&#39;</span><span class="p">,</span>
  1720. <span class="s1">&#39;HandlerCallDetails&#39;</span><span class="p">,</span>
  1721. <span class="s1">&#39;GenericRpcHandler&#39;</span><span class="p">,</span>
  1722. <span class="s1">&#39;ServiceRpcHandler&#39;</span><span class="p">,</span>
  1723. <span class="s1">&#39;Server&#39;</span><span class="p">,</span>
  1724. <span class="s1">&#39;ServerInterceptor&#39;</span><span class="p">,</span>
  1725. <span class="s1">&#39;unary_unary_rpc_method_handler&#39;</span><span class="p">,</span>
  1726. <span class="s1">&#39;unary_stream_rpc_method_handler&#39;</span><span class="p">,</span>
  1727. <span class="s1">&#39;stream_unary_rpc_method_handler&#39;</span><span class="p">,</span>
  1728. <span class="s1">&#39;stream_stream_rpc_method_handler&#39;</span><span class="p">,</span>
  1729. <span class="s1">&#39;method_handlers_generic_handler&#39;</span><span class="p">,</span>
  1730. <span class="s1">&#39;ssl_channel_credentials&#39;</span><span class="p">,</span>
  1731. <span class="s1">&#39;metadata_call_credentials&#39;</span><span class="p">,</span>
  1732. <span class="s1">&#39;access_token_call_credentials&#39;</span><span class="p">,</span>
  1733. <span class="s1">&#39;composite_call_credentials&#39;</span><span class="p">,</span>
  1734. <span class="s1">&#39;composite_channel_credentials&#39;</span><span class="p">,</span>
  1735. <span class="s1">&#39;local_channel_credentials&#39;</span><span class="p">,</span>
  1736. <span class="s1">&#39;local_server_credentials&#39;</span><span class="p">,</span>
  1737. <span class="s1">&#39;alts_channel_credentials&#39;</span><span class="p">,</span>
  1738. <span class="s1">&#39;alts_server_credentials&#39;</span><span class="p">,</span>
  1739. <span class="s1">&#39;ssl_server_credentials&#39;</span><span class="p">,</span>
  1740. <span class="s1">&#39;ssl_server_certificate_configuration&#39;</span><span class="p">,</span>
  1741. <span class="s1">&#39;dynamic_ssl_server_credentials&#39;</span><span class="p">,</span>
  1742. <span class="s1">&#39;channel_ready_future&#39;</span><span class="p">,</span>
  1743. <span class="s1">&#39;insecure_channel&#39;</span><span class="p">,</span>
  1744. <span class="s1">&#39;secure_channel&#39;</span><span class="p">,</span>
  1745. <span class="s1">&#39;intercept_channel&#39;</span><span class="p">,</span>
  1746. <span class="s1">&#39;server&#39;</span><span class="p">,</span>
  1747. <span class="s1">&#39;protos&#39;</span><span class="p">,</span>
  1748. <span class="s1">&#39;services&#39;</span><span class="p">,</span>
  1749. <span class="s1">&#39;protos_and_services&#39;</span><span class="p">,</span>
  1750. <span class="p">)</span>
  1751. <span class="c1">############################### Extension Shims ################################</span>
  1752. <span class="c1"># Here to maintain backwards compatibility; avoid using these in new code!</span>
  1753. <span class="k">try</span><span class="p">:</span>
  1754. <span class="kn">import</span> <span class="nn">grpc_tools</span>
  1755. <span class="n">sys</span><span class="o">.</span><span class="n">modules</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="s1">&#39;grpc.tools&#39;</span><span class="p">:</span> <span class="n">grpc_tools</span><span class="p">})</span>
  1756. <span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span>
  1757. <span class="k">pass</span>
  1758. <span class="k">try</span><span class="p">:</span>
  1759. <span class="kn">import</span> <span class="nn">grpc_health</span>
  1760. <span class="n">sys</span><span class="o">.</span><span class="n">modules</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="s1">&#39;grpc.health&#39;</span><span class="p">:</span> <span class="n">grpc_health</span><span class="p">})</span>
  1761. <span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span>
  1762. <span class="k">pass</span>
  1763. <span class="k">try</span><span class="p">:</span>
  1764. <span class="kn">import</span> <span class="nn">grpc_reflection</span>
  1765. <span class="n">sys</span><span class="o">.</span><span class="n">modules</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="s1">&#39;grpc.reflection&#39;</span><span class="p">:</span> <span class="n">grpc_reflection</span><span class="p">})</span>
  1766. <span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span>
  1767. <span class="k">pass</span>
  1768. <span class="c1"># Prevents import order issue in the case of renamed path.</span>
  1769. <span class="k">if</span> <span class="n">sys</span><span class="o">.</span><span class="n">version_info</span> <span class="o">&gt;=</span> <span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">6</span><span class="p">)</span> <span class="ow">and</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s2">&quot;grpc&quot;</span><span class="p">:</span>
  1770. <span class="kn">from</span> <span class="nn">grpc</span> <span class="kn">import</span> <span class="n">aio</span> <span class="c1"># pylint: disable=ungrouped-imports</span>
  1771. <span class="n">sys</span><span class="o">.</span><span class="n">modules</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="s1">&#39;grpc.aio&#39;</span><span class="p">:</span> <span class="n">aio</span><span class="p">})</span>
  1772. </pre></div>
  1773. </div>
  1774. </div>
  1775. </div>
  1776. <div class="clearer"></div>
  1777. </div>
  1778. <div class="footer">
  1779. &copy;2020, The gRPC Authors.
  1780. </div>
  1781. <script type="text/javascript">
  1782. var _gaq = _gaq || [];
  1783. _gaq.push(['_setAccount', 'UA-60127042-1']);
  1784. _gaq.push(['_setDomainName', 'none']);
  1785. _gaq.push(['_setAllowLinker', true]);
  1786. _gaq.push(['_trackPageview']);
  1787. (function() {
  1788. var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
  1789. ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
  1790. var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  1791. })();
  1792. </script>
  1793. </body>
  1794. </html>