Skip to content

Commit

Permalink
feat(client_options): add new client options 'quota_project_id', 'sco…
Browse files Browse the repository at this point in the history
…pes', and 'credentials_file'

Co-authored-by: Bu Sun Kim <8822365+busunkim96@users.noreply.github.com>
  • Loading branch information
software-dov and busunkim96 committed Jun 5, 2020
1 parent 33ab7fa commit a582936
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 10 deletions.
26 changes: 19 additions & 7 deletions google/api_core/client_options.py
Expand Up @@ -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``
Expand All @@ -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(
Expand All @@ -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__)
Expand All @@ -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()
Expand Down
33 changes: 30 additions & 3 deletions tests/unit/test_client_options.py
Expand Up @@ -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():
Expand Down Expand Up @@ -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():
Expand Down

0 comments on commit a582936

Please sign in to comment.