diff options
| author | Kevin Van Brunt <kmvanbrunt@gmail.com> | 2021-09-01 13:13:13 -0400 |
|---|---|---|
| committer | Kevin Van Brunt <kmvanbrunt@gmail.com> | 2021-09-01 13:33:22 -0400 |
| commit | 64fdc44febc5d2551889cd973699d84dbb849f37 (patch) | |
| tree | 5a2fcf0353b7457d1ab088d61141efedbdec2cc6 | |
| parent | 81d5f0458ee767f4c1cd76cb9a8f4036beb15273 (diff) | |
| download | cmd2-git-64fdc44febc5d2551889cd973699d84dbb849f37.tar.gz | |
Added cmd2.Cmd method to determine what ArgparseCompleter type to use
| -rw-r--r-- | cmd2/argparse_completer.py | 18 | ||||
| -rw-r--r-- | cmd2/cmd2.py | 25 |
2 files changed, 22 insertions, 21 deletions
diff --git a/cmd2/argparse_completer.py b/cmd2/argparse_completer.py index c00f3e60..f614ac32 100644 --- a/cmd2/argparse_completer.py +++ b/cmd2/argparse_completer.py @@ -408,11 +408,7 @@ class ArgparseCompleter: parent_tokens[action.dest] = [token] parser: argparse.ArgumentParser = self._subcommand_action.choices[token] - completer_type: Optional[ - Type[ArgparseCompleter] - ] = parser.get_ap_completer_type() # type: ignore[attr-defined] - if completer_type is None: - completer_type = DEFAULT_AP_COMPLETER + completer_type = self._cmd2_app._determine_ap_completer_type(parser) completer = completer_type(parser, self._cmd2_app, parent_tokens=parent_tokens) @@ -616,11 +612,7 @@ class ArgparseCompleter: for token_index, token in enumerate(tokens): if token in self._subcommand_action.choices: parser: argparse.ArgumentParser = self._subcommand_action.choices[token] - completer_type: Optional[ - Type[ArgparseCompleter] - ] = parser.get_ap_completer_type() # type: ignore[attr-defined] - if completer_type is None: - completer_type = DEFAULT_AP_COMPLETER + completer_type = self._cmd2_app._determine_ap_completer_type(parser) completer = completer_type(parser, self._cmd2_app) return completer.complete_subcommand_help(text, line, begidx, endidx, tokens[token_index + 1 :]) @@ -643,11 +635,7 @@ class ArgparseCompleter: for token_index, token in enumerate(tokens): if token in self._subcommand_action.choices: parser: argparse.ArgumentParser = self._subcommand_action.choices[token] - completer_type: Optional[ - Type[ArgparseCompleter] - ] = parser.get_ap_completer_type() # type: ignore[attr-defined] - if completer_type is None: - completer_type = DEFAULT_AP_COMPLETER + completer_type = self._cmd2_app._determine_ap_completer_type(parser) completer = completer_type(parser, self._cmd2_app) return completer.format_help(tokens[token_index + 1 :]) diff --git a/cmd2/cmd2.py b/cmd2/cmd2.py index 128cfa76..eaa0655d 100644 --- a/cmd2/cmd2.py +++ b/cmd2/cmd2.py @@ -1841,6 +1841,23 @@ class Cmd(cmd.Cmd): # Display matches using actual display function. This also redraws the prompt and input lines. orig_pyreadline_display(matches_to_display) + @staticmethod + def _determine_ap_completer_type(parser: argparse.ArgumentParser) -> Type[argparse_completer.ArgparseCompleter]: + """ + Determine what type of ArgparseCompleter to use on a given parser. If the parser does not have one + set, then use argparse_completer.DEFAULT_AP_COMPLETER. + + :param parser: the parser to examine + :return: type of ArgparseCompleter + """ + completer_type: Optional[ + Type[argparse_completer.ArgparseCompleter] + ] = parser.get_ap_completer_type() # type: ignore[attr-defined] + + if completer_type is None: + completer_type = argparse_completer.DEFAULT_AP_COMPLETER + return completer_type + def _perform_completion( self, text: str, line: str, begidx: int, endidx: int, custom_settings: Optional[utils.CustomCompletionSettings] = None ) -> None: @@ -1910,9 +1927,7 @@ class Cmd(cmd.Cmd): cmd_set = self._cmd_to_command_sets[command] if command in self._cmd_to_command_sets else None # Create the argparse completer - completer_type = argparser.get_ap_completer_type() # type: ignore[attr-defined] - if completer_type is None: - completer_type = argparse_completer.DEFAULT_AP_COMPLETER + completer_type = self._determine_ap_completer_type(argparser) completer = completer_type(argparser, self) completer_func = functools.partial( @@ -1932,9 +1947,7 @@ class Cmd(cmd.Cmd): # Otherwise we are completing the command token or performing custom completion else: # Create the argparse completer - completer_type = custom_settings.parser.get_ap_completer_type() # type: ignore[attr-defined] - if completer_type is None: - completer_type = argparse_completer.DEFAULT_AP_COMPLETER + completer_type = self._determine_ap_completer_type(custom_settings.parser) completer = completer_type(custom_settings.parser, self) completer_func = functools.partial( |
