Completion routine for an argparse argument. :return: a Completions object :raises CompletionError: if the completer or choices function this calls raises one
(
self,
text: str,
line: str,
begidx: int,
endidx: int,
arg_state: _ArgumentState,
consumed_arg_values: dict[str, list[str]],
*,
cmd_set: CommandSet[Any] | None = None,
)
| 748 | return args, kwargs |
| 749 | |
| 750 | def _complete_arg( |
| 751 | self, |
| 752 | text: str, |
| 753 | line: str, |
| 754 | begidx: int, |
| 755 | endidx: int, |
| 756 | arg_state: _ArgumentState, |
| 757 | consumed_arg_values: dict[str, list[str]], |
| 758 | *, |
| 759 | cmd_set: CommandSet[Any] | None = None, |
| 760 | ) -> Completions: |
| 761 | """Completion routine for an argparse argument. |
| 762 | |
| 763 | :return: a Completions object |
| 764 | :raises CompletionError: if the completer or choices function this calls raises one |
| 765 | """ |
| 766 | # Check if the argument uses a completer |
| 767 | completer = arg_state.action.get_completer() # type: ignore[attr-defined] |
| 768 | if completer is not None: |
| 769 | args, kwargs = self._prepare_callable_params( |
| 770 | completer, |
| 771 | arg_state, |
| 772 | text, |
| 773 | consumed_arg_values, |
| 774 | cmd_set, |
| 775 | ) |
| 776 | args.extend([text, line, begidx, endidx]) |
| 777 | completions: Completions = completer(*args, **kwargs) |
| 778 | |
| 779 | # Otherwise it uses a choices provider or choices list |
| 780 | else: |
| 781 | choices_provider = arg_state.action.get_choices_provider() # type: ignore[attr-defined] |
| 782 | if choices_provider is not None: |
| 783 | args, kwargs = self._prepare_callable_params( |
| 784 | choices_provider, |
| 785 | arg_state, |
| 786 | text, |
| 787 | consumed_arg_values, |
| 788 | cmd_set, |
| 789 | ) |
| 790 | all_choices = list(choices_provider(*args, **kwargs)) |
| 791 | else: |
| 792 | all_choices = self._choices_to_items(arg_state) |
| 793 | |
| 794 | # Filter used values and run basic completion |
| 795 | used_values = consumed_arg_values.get(arg_state.action.dest, []) |
| 796 | filtered = [choice for choice in all_choices if choice.text not in used_values] |
| 797 | completions = self._cmd2_app.basic_complete(text, line, begidx, endidx, filtered) |
| 798 | |
| 799 | return self._build_completion_table(arg_state, completions) |
| 800 | |
| 801 | |
| 802 | # The default ArgparseCompleter class for a cmd2 app |
no test coverage detected