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
This commit is contained in:
Jamie Lennox 2014-12-17 15:47:15 +10:00
parent e422109eb3
commit 003f1ed048
3 changed files with 50 additions and 4 deletions

View File

@ -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,

View File

@ -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)

View File

@ -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