summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2015-08-17 16:18:58 +0000
committerGerrit Code Review <review@openstack.org>2015-08-17 16:18:58 +0000
commit17a37e5760e6079f9c139270c00eb2d9dc2b4563 (patch)
treeb99c95792a6b21ff9933dcb677f321d62e6fa4db
parent5ad6afe9913dcc7155cd12d73af8be195c9ba136 (diff)
parenta570b60d674d6bbdf90f26440e68771f22b704db (diff)
downloadpython-novaclient-17a37e5760e6079f9c139270c00eb2d9dc2b4563.tar.gz
Merge "Copy cli arguments in api_versions.wraps decorator"
-rw-r--r--novaclient/api_versions.py13
-rw-r--r--novaclient/tests/unit/test_api_versions.py23
2 files changed, 33 insertions, 3 deletions
diff --git a/novaclient/api_versions.py b/novaclient/api_versions.py
index 02729f69..06fcc52b 100644
--- a/novaclient/api_versions.py
+++ b/novaclient/api_versions.py
@@ -22,6 +22,7 @@ from oslo_utils import strutils
import novaclient
from novaclient import exceptions
from novaclient.i18n import _, _LW
+from novaclient.openstack.common import cliutils
from novaclient import utils
LOG = logging.getLogger(__name__)
@@ -342,8 +343,14 @@ def wraps(start_version, end_version=None):
if not methods:
raise exceptions.VersionNotFoundForAPIMethod(
obj.api_version.get_string(), name)
- else:
- return max(methods, key=lambda f: f.start_version).func(
- obj, *args, **kwargs)
+
+ method = max(methods, key=lambda f: f.start_version)
+
+ return method.func(obj, *args, **kwargs)
+
+ if hasattr(func, 'arguments'):
+ for cli_args, cli_kwargs in func.arguments:
+ cliutils.add_arg(substitution, *cli_args, **cli_kwargs)
return substitution
+
return decor
diff --git a/novaclient/tests/unit/test_api_versions.py b/novaclient/tests/unit/test_api_versions.py
index e3c204de..02df69a4 100644
--- a/novaclient/tests/unit/test_api_versions.py
+++ b/novaclient/tests/unit/test_api_versions.py
@@ -18,6 +18,7 @@ import mock
import novaclient
from novaclient import api_versions
from novaclient import exceptions
+from novaclient.openstack.common import cliutils
from novaclient.tests.unit import utils
from novaclient.v2 import versions
@@ -250,6 +251,28 @@ class WrapsTestCase(utils.TestCase):
checker.assert_called_once_with(*((obj,) + some_args), **some_kwargs)
+ def test_cli_args_are_copied(self):
+
+ @api_versions.wraps("2.2", "2.6")
+ @cliutils.arg("name_1", help="Name of the something")
+ @cliutils.arg("action_1", help="Some action")
+ def some_func_1(cs, args):
+ pass
+
+ @cliutils.arg("name_2", help="Name of the something")
+ @cliutils.arg("action_2", help="Some action")
+ @api_versions.wraps("2.2", "2.6")
+ def some_func_2(cs, args):
+ pass
+
+ args_1 = [(('name_1',), {'help': 'Name of the something'}),
+ (('action_1',), {'help': 'Some action'})]
+ self.assertEqual(args_1, some_func_1.arguments)
+
+ args_2 = [(('name_2',), {'help': 'Name of the something'}),
+ (('action_2',), {'help': 'Some action'})]
+ self.assertEqual(args_2, some_func_2.arguments)
+
class DiscoverVersionTestCase(utils.TestCase):
def setUp(self):