Skip to content

Commit fc7621b

Browse files
Fix list parameters handling
1 parent 30f62a8 commit fc7621b

File tree

2 files changed

+16
-4
lines changed

2 files changed

+16
-4
lines changed

cloudinary_cli/utils/utils.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ def parse_args_kwargs(func, params=None, kwargs=None):
149149
params_specs = parse(func.__doc__).params
150150

151151
if len(args) > num_req:
152-
# Here we comsumed more args than the function can get,
152+
# Here we consumed more args than the function can get,
153153
# let's see if we have a list arg and pass everything as list.
154154
# Otherwise, let's pass everything as is and hope for the best :)
155155
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):
161161
for s in params_specs:
162162
if s.type_name and s.type_name.startswith('list'):
163163
pos = get_index_by_name(spec.args, s.arg_name)
164-
args[pos] = normalize_list_params(args[pos])
164+
if isinstance(pos, int) and 0 <= pos < len(args):
165+
args[pos] = normalize_list_params(args[pos])
166+
if s.arg_name in kwargs:
167+
kwargs[s.arg_name] = normalize_list_params(kwargs[s.arg_name])
165168

166169
return args, kwargs
167170

@@ -334,7 +337,7 @@ def normalize_list_params(params):
334337
"""
335338
normalized_params = []
336339
for f in build_array(params):
337-
if "," in f:
340+
if isinstance(f, str) and "," in f:
338341
normalized_params += f.split(",")
339342
else:
340343
normalized_params.append(f)

test/test_utils.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,15 @@ def test_parse_args_kwargs(self):
7070
self.assertListEqual(["l1a0", "l1a1", "l1a2", "l1a3"], args[2])
7171
self.assertEqual("sa2", args[3])
7272

73+
# should consume list values separated by spaces and commas in kwargs
74+
args, kwargs = parse_args_kwargs(_list_args_test_func,
75+
["l0a0,l0a1,l0a2", "sa0"], {"list_arg": "l1a0,l1a1", "non_list_arg2": "sa2"})
76+
self.assertEqual(2, len(args))
77+
self.assertListEqual(["l0a0", "l0a1", "l0a2"], args[0])
78+
self.assertEqual("sa0", args[1])
79+
self.assertListEqual(["l1a0", "l1a1"], kwargs["list_arg"])
80+
self.assertEqual("sa2", kwargs["non_list_arg2"])
81+
7382
def test_group_params(self):
7483
self.assertDictEqual({}, group_params([]))
7584
self.assertDictEqual({"k1": "v1", "k2": "v2"}, group_params([("k1", "v1"), ("k2", "v2")]))
@@ -143,7 +152,7 @@ def _args_kwargs_test_func(arg1, arg2=None):
143152
return arg1, arg2
144153

145154

146-
def _list_args_test_func(fist_list_arg, non_list_arg, list_arg, non_list_arg2):
155+
def _list_args_test_func(fist_list_arg, non_list_arg, list_arg=None, non_list_arg2=None):
147156
"""
148157
Function for testing list args.
149158

0 commit comments

Comments
 (0)