diff --git a/google/api_core/client_options.py b/google/api_core/client_options.py index b6d9384d..d272f40f 100644 --- a/google/api_core/client_options.py +++ b/google/api_core/client_options.py @@ -53,15 +53,20 @@ class ClientOptions(object): """Client Options used to set options on clients. Args: - api_endpoint (str): The desired API endpoint, e.g., compute.googleapis.com - client_cert_source (Callable[[], (bytes, bytes)]): An optional callback + 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 (Callable[[], (str, str, bytes)]): An optional - 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. + 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`` @@ -73,6 +78,9 @@ def __init__( 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( @@ -81,6 +89,9 @@ def __init__( 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__) @@ -90,7 +101,8 @@ def from_dict(options): """Construct a client options object from a dictionary. Args: - options (dict): A dictionary with client options. + options (Dict[str, Any]): A dictionary with client options. + See the docstring for ClientOptions for details on valid arguments. """ client_options = ClientOptions() diff --git a/tests/unit/test_client_options.py b/tests/unit/test_client_options.py index 67c4f6b4..1581c56e 100644 --- a/tests/unit/test_client_options.py +++ b/tests/unit/test_client_options.py @@ -28,11 +28,24 @@ def get_client_encrypted_cert(): def test_constructor(): options = client_options.ClientOptions( - api_endpoint="foo.googleapis.com", client_cert_source=get_client_cert + api_endpoint="foo.googleapis.com", + client_cert_source=get_client_cert, + quota_project_id="quote-proj", + credentials_file="path/to/credentials.json", + scopes=[ + "https://www.googleapis.com/auth/cloud-platform", + "https://www.googleapis.com/auth/cloud-platform.read-only", + ] ) assert options.api_endpoint == "foo.googleapis.com" assert options.client_cert_source() == (b"cert", b"key") + assert options.quota_project_id == "quote-proj" + assert options.credentials_file == "path/to/credentials.json" + assert options.scopes == [ + "https://www.googleapis.com/auth/cloud-platform", + "https://www.googleapis.com/auth/cloud-platform.read-only", + ] def test_constructor_with_encrypted_cert_source(): @@ -61,12 +74,26 @@ def test_constructor_with_both_cert_sources(): def test_from_dict(): options = client_options.from_dict( - {"api_endpoint": "foo.googleapis.com", "client_cert_source": get_client_cert} + { + "api_endpoint": "foo.googleapis.com", + "client_cert_source": get_client_cert, + "quota_project_id": "quote-proj", + "credentials_file": "path/to/credentials.json", + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform", + "https://www.googleapis.com/auth/cloud-platform.read-only", + ] + } ) assert options.api_endpoint == "foo.googleapis.com" - # assert options.client_cert_source == get_client_cert assert options.client_cert_source() == (b"cert", b"key") + assert options.quota_project_id == "quote-proj" + assert options.credentials_file == "path/to/credentials.json" + assert options.scopes == [ + "https://www.googleapis.com/auth/cloud-platform", + "https://www.googleapis.com/auth/cloud-platform.read-only", + ] def test_from_dict_bad_argument():