Skip to content

Commit

Permalink
Add client_options. (#9043)
Browse files Browse the repository at this point in the history
  • Loading branch information
busunkim96 authored Aug 28, 2019
1 parent 245ffad commit 6974c2d
Show file tree
Hide file tree
Showing 5 changed files with 71 additions and 9 deletions.
13 changes: 8 additions & 5 deletions resource_manager/google/cloud/resource_manager/_http.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,17 +28,20 @@ class Connection(_http.JSONConnection):
:type client_info: :class:`~google.api_core.client_info.ClientInfo`
:param client_info: (Optional) instance used to generate user agent.
:type client_options: :class:`~google.api_core.client_options.ClientOptions`
:param client_options (Optional) Client options used to set user options
on the client. API Endpoint should be set through client_options.
"""

def __init__(self, client, client_info=None):
super(Connection, self).__init__(client, client_info)
DEFAULT_API_ENDPOINT = "https://cloudresourcemanager.googleapis.com"

def __init__(self, client, client_info=None, api_endpoint=DEFAULT_API_ENDPOINT):
super(Connection, self).__init__(client, client_info)
self.API_BASE_URL = api_endpoint
self._client_info.gapic_version = __version__
self._client_info.client_library_version = __version__

API_BASE_URL = "https://cloudresourcemanager.googleapis.com"
"""The base of the API call URL."""

API_VERSION = "v1beta1"
"""The version of the API, used in building the API call's URL."""

Expand Down
22 changes: 20 additions & 2 deletions resource_manager/google/cloud/resource_manager/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

import six

import google.api_core.client_options
from google.api_core import page_iterator
from google.cloud.client import Client as BaseClient

Expand Down Expand Up @@ -56,14 +57,31 @@ class Client(BaseClient):
requests. If ``None``, then default info will be used. Generally,
you only need to set this if you're developing your own library
or partner tool.
:type client_options: :class:`~google.api_core.client_options.ClientOptions`
or :class:`dict`
:param client_options: (Optional) Client options used to set user options
on the client. API Endpoint should be set through client_options.
"""

SCOPE = ("https://www.googleapis.com/auth/cloud-platform",)
"""The scopes required for authenticating as a Resouce Manager consumer."""

def __init__(self, credentials=None, _http=None, client_info=None):
def __init__(
self, credentials=None, _http=None, client_info=None, client_options=None
):
super(Client, self).__init__(credentials=credentials, _http=_http)
self._connection = Connection(self, client_info=client_info)

kw_args = {"client_info": client_info}
if client_options:
if type(client_options) == dict:
client_options = google.api_core.client_options.from_dict(
client_options
)
if client_options.api_endpoint:
api_endpoint = client_options.api_endpoint
kw_args["api_endpoint"] = api_endpoint

self._connection = Connection(self, **kw_args)

def new_project(self, project_id, name=None, labels=None):
"""Create a project bound to the current client.
Expand Down
2 changes: 1 addition & 1 deletion resource_manager/setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
# 'Development Status :: 5 - Production/Stable'
release_status = 'Development Status :: 3 - Alpha'
dependencies = [
"google-cloud-core >= 1.0.0, < 2.0dev",
"google-cloud-core >= 1.0.3, < 2.0dev",
]
extras = {
}
Expand Down
8 changes: 7 additions & 1 deletion resource_manager/tests/unit/test__http.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,13 @@ def _make_one(self, *args, **kw):

def test_build_api_url_no_extra_query_params(self):
conn = self._make_one(object())
URI = "/".join([conn.API_BASE_URL, conn.API_VERSION, "foo"])
URI = "/".join([conn.DEFAULT_API_ENDPOINT, conn.API_VERSION, "foo"])
self.assertEqual(conn.build_api_url("/foo"), URI)

def test_build_api_url_w_custom_endpoint(self):
custom_endpoint = "https://foo-cloudresourcemanager.googleapis.com"
conn = self._make_one(object(), api_endpoint=custom_endpoint)
URI = "/".join([custom_endpoint, conn.API_VERSION, "foo"])
self.assertEqual(conn.build_api_url("/foo"), URI)

def test_build_api_url_w_extra_query_params(self):
Expand Down
35 changes: 35 additions & 0 deletions resource_manager/tests/unit/test_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,41 @@ def test_ctor_w_client_info(self):
self.assertIs(client._http_internal, http)
self.assertIs(client._connection._client_info, client_info)

def test_ctor_w_empty_client_options(self):
from google.api_core.client_options import ClientOptions

http = object()
client_options = ClientOptions()
client = self._make_one(_http=http, client_options=client_options)
self.assertEqual(
client._connection.API_BASE_URL, client._connection.DEFAULT_API_ENDPOINT
)

def test_ctor_w_client_options_object(self):
from google.api_core.client_options import ClientOptions

http = object()
client_options = ClientOptions(
api_endpoint="https://foo-cloudresourcemanager.googleapis.com"
)
client = self._make_one(_http=http, client_options=client_options)
self.assertEqual(
client._connection.API_BASE_URL,
"https://foo-cloudresourcemanager.googleapis.com",
)

def test_ctor_w_client_options_dict(self):
http = object()
client_options = {
"api_endpoint": "https://foo-cloudresourcemanager.googleapis.com"
}

client = self._make_one(_http=http, client_options=client_options)
self.assertEqual(
client._connection.API_BASE_URL,
"https://foo-cloudresourcemanager.googleapis.com",
)

def test_new_project_factory(self):
from google.cloud.resource_manager.project import Project

Expand Down

0 comments on commit 6974c2d

Please sign in to comment.