From 003f1ed0487faaee439f6d38f3de5a3e0c44a25b Mon Sep 17 00:00:00 2001 From: Jamie Lennox Date: Wed, 17 Dec 2014 15:47:15 +1000 Subject: [PATCH] Pass kwargs through to the adapter A major point of the adapter is that we should be able to add new arguments to the adapter that are supported automatically by the clients that support it. This means we have to pass all additional arguments through to adapter. Regardless of whether the arguments are passed to the adapter or to the traditional client the kwargs are explicitly provided so we won't end up with missing arguments. Closes-Bug: #1403329 Change-Id: I7303b184875dc296ca855ad89496173c42070879 --- novaclient/client.py | 4 +-- novaclient/tests/v1_1/test_client.py | 45 ++++++++++++++++++++++++++++ novaclient/v1_1/client.py | 5 ++-- 3 files changed, 50 insertions(+), 4 deletions(-) create mode 100644 novaclient/tests/v1_1/test_client.py diff --git a/novaclient/client.py b/novaclient/client.py index a04a92e47..790489c99 100644 --- a/novaclient/client.py +++ b/novaclient/client.py @@ -720,11 +720,11 @@ def _construct_http_client(username=None, password=None, project_id=None, auth_token=None, cacert=None, tenant_id=None, user_id=None, connection_pool=False, session=None, auth=None, user_agent='python-novaclient', - **kwargs): + interface=None, **kwargs): if session: return SessionClient(session=session, auth=auth, - interface=endpoint_type, + interface=interface or endpoint_type, service_type=service_type, region_name=region_name, service_name=service_name, diff --git a/novaclient/tests/v1_1/test_client.py b/novaclient/tests/v1_1/test_client.py new file mode 100644 index 000000000..fa0ed3af6 --- /dev/null +++ b/novaclient/tests/v1_1/test_client.py @@ -0,0 +1,45 @@ +# 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. + +import uuid + +from keystoneclient import session + +from novaclient.tests import utils +from novaclient.v1_1 import client + + +class ClientTest(utils.TestCase): + + def test_adapter_properties(self): + # sample of properties, there are many more + user_agent = uuid.uuid4().hex + endpoint_override = uuid.uuid4().hex + + s = session.Session() + c = client.Client(session=s, + user_agent=user_agent, + endpoint_override=endpoint_override) + + self.assertEqual(user_agent, c.client.user_agent) + self.assertEqual(endpoint_override, c.client.endpoint_override) + + def test_passing_interface(self): + endpoint_type = uuid.uuid4().hex + interface = uuid.uuid4().hex + + s = session.Session() + c = client.Client(session=s, + interface=interface, + endpoint_type=endpoint_type) + + self.assertEqual(interface, c.client.interface) diff --git a/novaclient/v1_1/client.py b/novaclient/v1_1/client.py index 70d5298dc..5e26ddd64 100644 --- a/novaclient/v1_1/client.py +++ b/novaclient/v1_1/client.py @@ -103,7 +103,7 @@ class Client(object): auth_system='keystone', auth_plugin=None, auth_token=None, cacert=None, tenant_id=None, user_id=None, connection_pool=False, session=None, auth=None, - completion_cache=None): + completion_cache=None, **kwargs): # FIXME(comstud): Rename the api_key argument above when we # know it's not being used as keyword argument @@ -192,7 +192,8 @@ class Client(object): cacert=cacert, connection_pool=connection_pool, session=session, - auth=auth) + auth=auth, + **kwargs) self.completion_cache = completion_cache