[docs]defconvert_kwargs_to_shell_list(**kwargs:bool|Iterable[pathlib.Path]|Iterable[str]|str|None,)->list[str]:"""Convert kwargs to a list of shell arguments."""result:list[str]=[]fork,vinkwargs.items():ifisinstance(v,str):result.extend([convert_to_cli_flag(k),v])elifisinstance(v,list|set|tuple):foriincast("Iterable[Any]",v):result.extend([convert_to_cli_flag(k),str(i)])elifisinstance(v,bool)andv:result.append(convert_to_cli_flag(k))returnresult
[docs]defconvert_list_to_shell_str(split_command:Iterable[str])->str:"""Combine a list of strings into a string that can be run as a command. Handles multi-platform differences. """ifplatform.system()=="Windows":returnsubprocess.list2cmdline(split_command)returnshlex.join(split_command)
[docs]defconvert_to_cli_flag(arg_name:str,*,prefix:str="--")->str:"""Convert string kwarg name into a CLI flag."""returnf"{prefix}{arg_name.replace('_','-')}"