diff --git a/cloudinary_cli/utils/utils.py b/cloudinary_cli/utils/utils.py index bb71b58..1e1ed3d 100644 --- a/cloudinary_cli/utils/utils.py +++ b/cloudinary_cli/utils/utils.py @@ -149,7 +149,7 @@ def parse_args_kwargs(func, params=None, kwargs=None): params_specs = parse(func.__doc__).params if len(args) > num_req: - # Here we comsumed more args than the function can get, + # Here we consumed more args than the function can get, # let's see if we have a list arg and pass everything as list. # Otherwise, let's pass everything as is and hope for the best :) last_positional_list_param = next((s for s in reversed(params_specs) if s.arg_name not in kwargs and s.type_name and s.type_name.startswith('list')), None) @@ -161,7 +161,10 @@ def parse_args_kwargs(func, params=None, kwargs=None): for s in params_specs: if s.type_name and s.type_name.startswith('list'): pos = get_index_by_name(spec.args, s.arg_name) - args[pos] = normalize_list_params(args[pos]) + if isinstance(pos, int) and 0 <= pos < len(args): + args[pos] = normalize_list_params(args[pos]) + if s.arg_name in kwargs: + kwargs[s.arg_name] = normalize_list_params(kwargs[s.arg_name]) return args, kwargs @@ -334,7 +337,7 @@ def normalize_list_params(params): """ normalized_params = [] for f in build_array(params): - if "," in f: + if isinstance(f, str) and "," in f: normalized_params += f.split(",") else: normalized_params.append(f) diff --git a/requirements.txt b/requirements.txt index e27162e..a0ab04f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ -cloudinary>=1.37.0 +cloudinary>=1.42.2 pygments jinja2 click diff --git a/test/test_utils.py b/test/test_utils.py index 3ed15f1..b77b3fe 100644 --- a/test/test_utils.py +++ b/test/test_utils.py @@ -70,6 +70,15 @@ def test_parse_args_kwargs(self): self.assertListEqual(["l1a0", "l1a1", "l1a2", "l1a3"], args[2]) self.assertEqual("sa2", args[3]) + # should consume list values separated by spaces and commas in kwargs + args, kwargs = parse_args_kwargs(_list_args_test_func, + ["l0a0,l0a1,l0a2", "sa0"], {"list_arg": "l1a0,l1a1", "non_list_arg2": "sa2"}) + self.assertEqual(2, len(args)) + self.assertListEqual(["l0a0", "l0a1", "l0a2"], args[0]) + self.assertEqual("sa0", args[1]) + self.assertListEqual(["l1a0", "l1a1"], kwargs["list_arg"]) + self.assertEqual("sa2", kwargs["non_list_arg2"]) + def test_group_params(self): self.assertDictEqual({}, group_params([])) self.assertDictEqual({"k1": "v1", "k2": "v2"}, group_params([("k1", "v1"), ("k2", "v2")])) @@ -143,7 +152,7 @@ def _args_kwargs_test_func(arg1, arg2=None): return arg1, arg2 -def _list_args_test_func(fist_list_arg, non_list_arg, list_arg, non_list_arg2): +def _list_args_test_func(fist_list_arg, non_list_arg, list_arg=None, non_list_arg2=None): """ Function for testing list args.