diff options
Diffstat (limited to 'cmd2')
-rwxr-xr-x | cmd2/argparse_completer.py | 18 | ||||
-rwxr-xr-x | cmd2/cmd2.py | 2 |
2 files changed, 16 insertions, 4 deletions
diff --git a/cmd2/argparse_completer.py b/cmd2/argparse_completer.py index e87e9c04..1b75411c 100755 --- a/cmd2/argparse_completer.py +++ b/cmd2/argparse_completer.py @@ -190,7 +190,8 @@ class AutoCompleter(object): token_start_index: int = 1, arg_choices: Dict[str, Union[List, Tuple, Callable]] = None, subcmd_args_lookup: dict = None, - tab_for_arg_help: bool = True): + tab_for_arg_help: bool = True, + cmd2_app=None): """ Create an AutoCompleter @@ -209,6 +210,7 @@ class AutoCompleter(object): self._arg_choices = arg_choices.copy() if arg_choices is not None else {} self._token_start_index = token_start_index self._tab_for_arg_help = tab_for_arg_help + self._cmd2_app = cmd2_app self._flags = [] # all flags in this command self._flags_without_args = [] # all flags that don't take arguments @@ -252,7 +254,8 @@ class AutoCompleter(object): subcmd_start = token_start_index + len(self._positional_actions) sub_completers[subcmd] = AutoCompleter(action.choices[subcmd], subcmd_start, arg_choices=subcmd_args, - subcmd_args_lookup=subcmd_lookup) + subcmd_args_lookup=subcmd_lookup, + cmd2_app=cmd2_app) sub_commands.append(subcmd) self._positional_completers[action.dest] = sub_completers self._arg_choices[action.dest] = sub_commands @@ -492,7 +495,16 @@ class AutoCompleter(object): args = self._arg_choices[action.dest] if callable(args): - args = args() + try: + if self._cmd2_app is not None: + try: + args = args(self._cmd2_app) + except TypeError: + args = args() + else: + args = args() + except TypeError: + return [] try: iter(args) diff --git a/cmd2/cmd2.py b/cmd2/cmd2.py index 288a506b..820e9441 100755 --- a/cmd2/cmd2.py +++ b/cmd2/cmd2.py @@ -1838,7 +1838,7 @@ class Cmd(cmd.Cmd): def _autocomplete_default(self, text: str, line: str, begidx: int, endidx: int, argparser: argparse.ArgumentParser) -> List[str]: """Default completion function for argparse commands.""" - completer = AutoCompleter(argparser) + completer = AutoCompleter(argparser, cmd2_app=self) tokens, _ = self.tokens_for_completion(line, begidx, endidx) results = completer.complete_command(tokens, text, line, begidx, endidx) |