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