]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/dashboard: Changed `@RESTController.args_from_json`
authorSebastian Wagner <sebastian.wagner@suse.com>
Wed, 21 Mar 2018 16:13:51 +0000 (17:13 +0100)
committerSebastian Wagner <sebastian.wagner@suse.com>
Fri, 23 Mar 2018 15:40:18 +0000 (16:40 +0100)
It now allows any keyword arguments. This is needed for ECP
and Pool creation.

Signed-off-by: Sebastian Wagner <sebastian.wagner@suse.com>
src/pybind/mgr/dashboard/tests/test_tools.py
src/pybind/mgr/dashboard/tools.py

index ca4d9040c3c0842984c97b2be687b91815d7ff80..4621d5a97db12e7186e672269acb6de2cc488c62 100644 (file)
@@ -38,8 +38,8 @@ class FooResource(RESTController):
 
 class FooArgs(RESTController):
     @RESTController.args_from_json
-    def set(self, code, name):
-        return {'code': code, 'name': name}
+    def set(self, code, name, opt1=None, opt2=None):
+        return {'code': code, 'name': name, 'opt1': opt1, 'opt2': opt2}
 
 
 # pylint: disable=C0102
@@ -93,7 +93,13 @@ class RESTControllerTest(ControllerTestCase):
 
     def test_args_from_json(self):
         self._put("/fooargs/hello", {'name': 'world'})
-        self.assertJsonBody({'code': 'hello', 'name': 'world'})
+        self.assertJsonBody({'code': 'hello', 'name': 'world', 'opt1': None, 'opt2': None})
+
+        self._put("/fooargs/hello", {'name': 'world', 'opt1': 'opt1'})
+        self.assertJsonBody({'code': 'hello', 'name': 'world', 'opt1': 'opt1', 'opt2': None})
+
+        self._put("/fooargs/hello", {'name': 'world', 'opt2': 'opt2'})
+        self.assertJsonBody({'code': 'hello', 'name': 'world', 'opt1': None, 'opt2': 'opt2'})
 
     def test_detail_route(self):
         self._get('/foo/1/detail')
index 8775a708730a26b83704101e523ab76d60910e81..719c640b176ec3a087de647abb6c4353e2c8bf72 100644 (file)
@@ -358,19 +358,8 @@ class RESTController(BaseController):
                 raise cherrypy.HTTPError(400, 'Failed to decode JSON: {}'
                                          .format(str(e)))
             if hasattr(func, '_args_from_json_'):
-                if sys.version_info > (3, 0):
-                    f_args = list(inspect.signature(func).parameters.keys())
-                else:
-                    f_args = inspect.getargspec(func).args[1:]
-                n_args = []
-                for arg in args:
-                    n_args.append(arg)
-                for arg in f_args:
-                    if arg in data:
-                        n_args.append(data[arg])
-                        data.pop(arg)
-                kwargs.update(data)
-                return func(*n_args, **kwargs)
+                kwargs.update(data.items())
+                return func(*args, **kwargs)
 
             return func(data, *args, **kwargs)
         return inner