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


grpc
Author(s):
autogenerated on Thu Mar 13 2025 02:58:26