aboutsummaryrefslogtreecommitdiff
path: root/google/api_core/client_options.py
diff options
context:
space:
mode:
Diffstat (limited to 'google/api_core/client_options.py')
-rw-r--r--google/api_core/client_options.py116
1 files changed, 116 insertions, 0 deletions
diff --git a/google/api_core/client_options.py b/google/api_core/client_options.py
new file mode 100644
index 0000000..be5523d
--- /dev/null
+++ b/google/api_core/client_options.py
@@ -0,0 +1,116 @@
+# Copyright 2019 Google LLC
+#
+# 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.
+
+"""Client options class.
+
+Client options provide a consistent interface for user options to be defined
+across clients.
+
+You can pass a client options object to a client.
+
+.. code-block:: python
+
+ from google.api_core.client_options import ClientOptions
+ from google.cloud.vision_v1 import ImageAnnotatorClient
+
+ def get_client_cert():
+ # code to load client certificate and private key.
+ return client_cert_bytes, client_private_key_bytes
+
+ options = ClientOptions(api_endpoint="foo.googleapis.com",
+ client_cert_source=get_client_cert)
+
+ client = ImageAnnotatorClient(client_options=options)
+
+You can also pass a mapping object.
+
+.. code-block:: python
+
+ from google.cloud.vision_v1 import ImageAnnotatorClient
+
+ client = ImageAnnotatorClient(
+ client_options={
+ "api_endpoint": "foo.googleapis.com",
+ "client_cert_source" : get_client_cert
+ })
+
+
+"""
+
+
+class ClientOptions(object):
+ """Client Options used to set options on clients.
+
+ Args:
+ api_endpoint (Optional[str]): The desired API endpoint, e.g.,
+ compute.googleapis.com
+ client_cert_source (Optional[Callable[[], (bytes, bytes)]]): A callback
+ which returns client certificate bytes and private key bytes both in
+ PEM format. ``client_cert_source`` and ``client_encrypted_cert_source``
+ are mutually exclusive.
+ client_encrypted_cert_source (Optional[Callable[[], (str, str, bytes)]]):
+ A callback which returns client certificate file path, encrypted
+ private key file path, and the passphrase bytes.``client_cert_source``
+ and ``client_encrypted_cert_source`` are mutually exclusive.
+ quota_project_id (Optional[str]): A project name that a client's
+ quota belongs to.
+ credentials_file (Optional[str]): A path to a file storing credentials.
+ scopes (Optional[Sequence[str]]): OAuth access token override scopes.
+
+ Raises:
+ ValueError: If both ``client_cert_source`` and ``client_encrypted_cert_source``
+ are provided.
+ """
+
+ def __init__(
+ self,
+ api_endpoint=None,
+ client_cert_source=None,
+ client_encrypted_cert_source=None,
+ quota_project_id=None,
+ credentials_file=None,
+ scopes=None,
+ ):
+ if client_cert_source and client_encrypted_cert_source:
+ raise ValueError(
+ "client_cert_source and client_encrypted_cert_source are mutually exclusive"
+ )
+ self.api_endpoint = api_endpoint
+ self.client_cert_source = client_cert_source
+ self.client_encrypted_cert_source = client_encrypted_cert_source
+ self.quota_project_id = quota_project_id
+ self.credentials_file = credentials_file
+ self.scopes = scopes
+
+ def __repr__(self):
+ return "ClientOptions: " + repr(self.__dict__)
+
+
+def from_dict(options):
+ """Construct a client options object from a mapping object.
+
+ Args:
+ options (collections.abc.Mapping): A mapping object with client options.
+ See the docstring for ClientOptions for details on valid arguments.
+ """
+
+ client_options = ClientOptions()
+
+ for key, value in options.items():
+ if hasattr(client_options, key):
+ setattr(client_options, key, value)
+ else:
+ raise ValueError("ClientOptions does not accept an option '" + key + "'")
+
+ return client_options