123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311 |
- # Copyright 2015-2016 gRPC authors.
- #
- # Licensed under the Apache License, Version 2.0 (the "License");
- # you may not use this file except in compliance with the License.
- # You may obtain a copy of the License at
- #
- # http://www.apache.org/licenses/LICENSE-2.0
- #
- # Unless required by applicable law or agreed to in writing, software
- # distributed under the License is distributed on an "AS IS" BASIS,
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- # See the License for the specific language governing permissions and
- # limitations under the License.
- """Entry points into the Beta API of gRPC Python."""
- # threading is referenced from specification in this module.
- import threading # pylint: disable=unused-import
- # interfaces, cardinality, and face are referenced from specification in this
- # module.
- import grpc
- from grpc import _auth
- from grpc.beta import _client_adaptations
- from grpc.beta import _metadata
- from grpc.beta import _server_adaptations
- from grpc.beta import interfaces # pylint: disable=unused-import
- from grpc.framework.common import cardinality # pylint: disable=unused-import
- from grpc.framework.interfaces.face import \
- face # pylint: disable=unused-import
- # pylint: disable=too-many-arguments
- ChannelCredentials = grpc.ChannelCredentials
- ssl_channel_credentials = grpc.ssl_channel_credentials
- CallCredentials = grpc.CallCredentials
- def metadata_call_credentials(metadata_plugin, name=None):
- def plugin(context, callback):
- def wrapped_callback(beta_metadata, error):
- callback(_metadata.unbeta(beta_metadata), error)
- metadata_plugin(context, wrapped_callback)
- return grpc.metadata_call_credentials(plugin, name=name)
- def google_call_credentials(credentials):
- """Construct CallCredentials from GoogleCredentials.
- Args:
- credentials: A GoogleCredentials object from the oauth2client library.
- Returns:
- A CallCredentials object for use in a GRPCCallOptions object.
- """
- return metadata_call_credentials(_auth.GoogleCallCredentials(credentials))
- access_token_call_credentials = grpc.access_token_call_credentials
- composite_call_credentials = grpc.composite_call_credentials
- composite_channel_credentials = grpc.composite_channel_credentials
- class Channel(object):
- """A channel to a remote host through which RPCs may be conducted.
- Only the "subscribe" and "unsubscribe" methods are supported for application
- use. This class' instance constructor and all other attributes are
- unsupported.
- """
- def __init__(self, channel):
- self._channel = channel
- def subscribe(self, callback, try_to_connect=None):
- """Subscribes to this Channel's connectivity.
- Args:
- callback: A callable to be invoked and passed an
- interfaces.ChannelConnectivity identifying this Channel's connectivity.
- The callable will be invoked immediately upon subscription and again for
- every change to this Channel's connectivity thereafter until it is
- unsubscribed.
- try_to_connect: A boolean indicating whether or not this Channel should
- attempt to connect if it is not already connected and ready to conduct
- RPCs.
- """
- self._channel.subscribe(callback, try_to_connect=try_to_connect)
- def unsubscribe(self, callback):
- """Unsubscribes a callback from this Channel's connectivity.
- Args:
- callback: A callable previously registered with this Channel from having
- been passed to its "subscribe" method.
- """
- self._channel.unsubscribe(callback)
- def insecure_channel(host, port):
- """Creates an insecure Channel to a remote host.
- Args:
- host: The name of the remote host to which to connect.
- port: The port of the remote host to which to connect.
- If None only the 'host' part will be used.
- Returns:
- A Channel to the remote host through which RPCs may be conducted.
- """
- channel = grpc.insecure_channel(host if port is None else '%s:%d' %
- (host, port))
- return Channel(channel)
- def secure_channel(host, port, channel_credentials):
- """Creates a secure Channel to a remote host.
- Args:
- host: The name of the remote host to which to connect.
- port: The port of the remote host to which to connect.
- If None only the 'host' part will be used.
- channel_credentials: A ChannelCredentials.
- Returns:
- A secure Channel to the remote host through which RPCs may be conducted.
- """
- channel = grpc.secure_channel(
- host if port is None else '%s:%d' % (host, port), channel_credentials)
- return Channel(channel)
- class StubOptions(object):
- """A value encapsulating the various options for creation of a Stub.
- This class and its instances have no supported interface - it exists to define
- the type of its instances and its instances exist to be passed to other
- functions.
- """
- def __init__(self, host, request_serializers, response_deserializers,
- metadata_transformer, thread_pool, thread_pool_size):
- self.host = host
- self.request_serializers = request_serializers
- self.response_deserializers = response_deserializers
- self.metadata_transformer = metadata_transformer
- self.thread_pool = thread_pool
- self.thread_pool_size = thread_pool_size
- _EMPTY_STUB_OPTIONS = StubOptions(None, None, None, None, None, None)
- def stub_options(host=None,
- request_serializers=None,
- response_deserializers=None,
- metadata_transformer=None,
- thread_pool=None,
- thread_pool_size=None):
- """Creates a StubOptions value to be passed at stub creation.
- All parameters are optional and should always be passed by keyword.
- Args:
- host: A host string to set on RPC calls.
- request_serializers: A dictionary from service name-method name pair to
- request serialization behavior.
- response_deserializers: A dictionary from service name-method name pair to
- response deserialization behavior.
- metadata_transformer: A callable that given a metadata object produces
- another metadata object to be used in the underlying communication on the
- wire.
- thread_pool: A thread pool to use in stubs.
- thread_pool_size: The size of thread pool to create for use in stubs;
- ignored if thread_pool has been passed.
- Returns:
- A StubOptions value created from the passed parameters.
- """
- return StubOptions(host, request_serializers, response_deserializers,
- metadata_transformer, thread_pool, thread_pool_size)
- def generic_stub(channel, options=None):
- """Creates a face.GenericStub on which RPCs can be made.
- Args:
- channel: A Channel for use by the created stub.
- options: A StubOptions customizing the created stub.
- Returns:
- A face.GenericStub on which RPCs can be made.
- """
- effective_options = _EMPTY_STUB_OPTIONS if options is None else options
- return _client_adaptations.generic_stub(
- channel._channel, # pylint: disable=protected-access
- effective_options.host,
- effective_options.metadata_transformer,
- effective_options.request_serializers,
- effective_options.response_deserializers)
- def dynamic_stub(channel, service, cardinalities, options=None):
- """Creates a face.DynamicStub with which RPCs can be invoked.
- Args:
- channel: A Channel for the returned face.DynamicStub to use.
- service: The package-qualified full name of the service.
- cardinalities: A dictionary from RPC method name to cardinality.Cardinality
- value identifying the cardinality of the RPC method.
- options: An optional StubOptions value further customizing the functionality
- of the returned face.DynamicStub.
- Returns:
- A face.DynamicStub with which RPCs can be invoked.
- """
- effective_options = _EMPTY_STUB_OPTIONS if options is None else options
- return _client_adaptations.dynamic_stub(
- channel._channel, # pylint: disable=protected-access
- service,
- cardinalities,
- effective_options.host,
- effective_options.metadata_transformer,
- effective_options.request_serializers,
- effective_options.response_deserializers)
- ServerCredentials = grpc.ServerCredentials
- ssl_server_credentials = grpc.ssl_server_credentials
- class ServerOptions(object):
- """A value encapsulating the various options for creation of a Server.
- This class and its instances have no supported interface - it exists to define
- the type of its instances and its instances exist to be passed to other
- functions.
- """
- def __init__(self, multi_method_implementation, request_deserializers,
- response_serializers, thread_pool, thread_pool_size,
- default_timeout, maximum_timeout):
- self.multi_method_implementation = multi_method_implementation
- self.request_deserializers = request_deserializers
- self.response_serializers = response_serializers
- self.thread_pool = thread_pool
- self.thread_pool_size = thread_pool_size
- self.default_timeout = default_timeout
- self.maximum_timeout = maximum_timeout
- _EMPTY_SERVER_OPTIONS = ServerOptions(None, None, None, None, None, None, None)
- def server_options(multi_method_implementation=None,
- request_deserializers=None,
- response_serializers=None,
- thread_pool=None,
- thread_pool_size=None,
- default_timeout=None,
- maximum_timeout=None):
- """Creates a ServerOptions value to be passed at server creation.
- All parameters are optional and should always be passed by keyword.
- Args:
- multi_method_implementation: A face.MultiMethodImplementation to be called
- to service an RPC if the server has no specific method implementation for
- the name of the RPC for which service was requested.
- request_deserializers: A dictionary from service name-method name pair to
- request deserialization behavior.
- response_serializers: A dictionary from service name-method name pair to
- response serialization behavior.
- thread_pool: A thread pool to use in stubs.
- thread_pool_size: The size of thread pool to create for use in stubs;
- ignored if thread_pool has been passed.
- default_timeout: A duration in seconds to allow for RPC service when
- servicing RPCs that did not include a timeout value when invoked.
- maximum_timeout: A duration in seconds to allow for RPC service when
- servicing RPCs no matter what timeout value was passed when the RPC was
- invoked.
- Returns:
- A StubOptions value created from the passed parameters.
- """
- return ServerOptions(multi_method_implementation, request_deserializers,
- response_serializers, thread_pool, thread_pool_size,
- default_timeout, maximum_timeout)
- def server(service_implementations, options=None):
- """Creates an interfaces.Server with which RPCs can be serviced.
- Args:
- service_implementations: A dictionary from service name-method name pair to
- face.MethodImplementation.
- options: An optional ServerOptions value further customizing the
- functionality of the returned Server.
- Returns:
- An interfaces.Server with which RPCs can be serviced.
- """
- effective_options = _EMPTY_SERVER_OPTIONS if options is None else options
- return _server_adaptations.server(
- service_implementations, effective_options.multi_method_implementation,
- effective_options.request_deserializers,
- effective_options.response_serializers, effective_options.thread_pool,
- effective_options.thread_pool_size)
|