From 71081e91deefcd9e1f82f58a00c0eda8c10219fe Mon Sep 17 00:00:00 2001 From: Hongbin Lu Date: Wed, 7 Nov 2018 04:17:22 +0000 Subject: [PATCH] Handle the case that a generic api version For example, if users provide an api version '1' (instead of 1.X), we treat that as a request to negotiate api version with server. Change-Id: I96cc8fae3a493d9ddc4165af47d2d376ec8f2cd8 --- zunclient/client.py | 7 +++++++ zunclient/tests/unit/test_client.py | 16 ++++++++++------ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/zunclient/client.py b/zunclient/client.py index 2717b59a..44a8983b 100644 --- a/zunclient/client.py +++ b/zunclient/client.py @@ -89,6 +89,13 @@ def Client(version='1', username=None, auth_url=None, **kwargs): osprofiler_profiler.init(profile) api_version, client_class = _get_client_class_and_version(version) + if api_version.is_latest(): + c = client_class(api_version=api_versions.APIVersion("1.1"), + auth_url=auth_url, + username=username, + **kwargs) + api_version = api_versions.discover_version(c, api_version) + return client_class(api_version=api_version, auth_url=auth_url, username=username, diff --git a/zunclient/tests/unit/test_client.py b/zunclient/tests/unit/test_client.py index bfff2914..ac46e548 100644 --- a/zunclient/tests/unit/test_client.py +++ b/zunclient/tests/unit/test_client.py @@ -22,24 +22,28 @@ from zunclient import exceptions class ClientTest(testtools.TestCase): + @mock.patch('zunclient.api_versions.discover_version', + return_value=api_versions.APIVersion('1.1')) @mock.patch('zunclient.v1.client.Client') - def test_no_version_argument(self, mock_zun_client_v1): + def test_no_version_argument(self, mock_zun_client_v1, + mock_discover_version): client.Client(auth_url='http://example/identity', username='admin') - api_version = api_versions.get_api_version('1') mock_zun_client_v1.assert_called_with( - api_version=api_version, + api_version=api_versions.APIVersion('1.1'), auth_url='http://example/identity', username='admin') + @mock.patch('zunclient.api_versions.discover_version', + return_value=api_versions.APIVersion('1.1')) @mock.patch('zunclient.v1.client.Client') - def test_valid_version_argument(self, mock_zun_client_v1): + def test_valid_version_argument(self, mock_zun_client_v1, + mock_discover_version): client.Client(version='1', auth_url='http://example/identity', username='admin') - api_version = api_versions.get_api_version('1') mock_zun_client_v1.assert_called_with( - api_version=api_version, + api_version=api_versions.APIVersion('1.1'), auth_url='http://example/identity', username='admin')