From 03d14f129b44eba255c2080de3c3da1522023d5b Mon Sep 17 00:00:00 2001 From: Chris Andrade <57306667+chrisfandrade16@users.noreply.github.com> Date: Tue, 21 Jan 2025 11:23:54 -0800 Subject: [PATCH] fix(configure.py): Add suppport for lists in functions that use Click CLI --- workflow/lifecycle/configure.py | 30 +++++++++++++----------------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/workflow/lifecycle/configure.py b/workflow/lifecycle/configure.py index 5902e93..dfd2316 100644 --- a/workflow/lifecycle/configure.py +++ b/workflow/lifecycle/configure.py @@ -110,34 +110,30 @@ def arguments(func: Callable[..., Any], work: Work) -> List[str]: ) if parameter_value_in_work: - if isinstance(parameter_value_in_work, list): - parameter_value_in_work = " ".join(parameter_value_in_work) - if isinstance(parameter, click.Argument): # If argument, then the parameter is purely positional without a key - args.append(f"{parameter_value_in_work}") + if isinstance(parameter_value_in_work, list): + for value in parameter_value_in_work: + args.append(f"{value}") + else: + args.append(f"{parameter_value_in_work}") elif isinstance(parameter, click.Option): if hasattr(parameter, "is_flag") and parameter.is_flag: # If is_flag=True, # then the parameter is a flag and doesn't have a value args.append(f"{parameter_name_in_cli}") else: - if len(parameter_name_in_cli) == 2: - # Short options - # (often denoted by a single hyphen and a single letter like -r) - # are commonly written with a space - # between the option and its value + if isinstance(parameter_value_in_work, list): + if hasattr(parameter, "multiple") and parameter.multiple: + for value in parameter_value_in_work: + args.append(f"{parameter_name_in_cli} {value}") + elif hasattr(parameter, "nargs") and parameter.nargs: + values = " ".join(parameter_value_in_work) + args.append(f"{parameter_name_in_cli} {values}") + else: args.append( f"{parameter_name_in_cli} {parameter_value_in_work}" ) - elif len(parameter_name_in_cli) > 2: - # Long options - # (often denoted by two hyphens and a word like --recursive) - # are commonly written with an equals sign - # between the option and its value - args.append( - f"{parameter_name_in_cli}={parameter_value_in_work}" - ) return args