def test(): from click._bashcomplete import resolve_ctx ctx = resolve_ctx(cli, "hcli", ["g1"]) assert ctx.command.name == "g1" ctx = resolve_ctx(cli, "hcli", ["g2", "subcmd3"]) assert ctx.command.name == "subcmd3" return
def get_choices(cli: Command, prog_name: str, args: List[str], incomplete: str) -> List[Tuple[str, str]]: ctx: typer.Context = resolve_ctx(cli, prog_name, args) if ctx.parent is None: assert isinstance(cli, Group) cli = cast(Group, cli) maybe_update_state(ctx) maybe_add_run_to_cli(cli) return original_get_choices(cli, prog_name, args, incomplete)
def get_choices(cli, prog_name, args, incomplete): ctx = resolve_ctx(cli, prog_name, args) if ctx is None: return choices = [] if incomplete and not incomplete[:1].isalnum(): for param in ctx.command.params: if not isinstance(param, click.Option): continue choices.extend(param.opts) choices.extend(param.secondary_opts) elif isinstance(ctx.command, click.MultiCommand): choices.extend(ctx.command.list_commands(ctx)) for item in choices: if item.startswith(incomplete): yield item
def complete_(self, text, line, begidx, endidx): # pylint: disable=unused-argument # Pulled from click._bashcomplete.do_complete, and adapted to work in this situation. args = shlex.split(line[:begidx]) ctx = resolve_ctx(command, command.name, args) if ctx is None: return [] choices = [] if text and not text[:1].isalnum(): for param in ctx.command.params: if not isinstance(param, click.Option): continue choices.extend(param.opts) choices.extend(param.secondary_opts) elif isinstance(ctx.command, click.MultiCommand): choices.extend(ctx.command.list_commands(ctx)) return [cmd for cmd in choices if cmd.startswith(text)]
def complete_(self, text, line, begidx, endidx): # pylint: disable=unused-argument # Pulled from click._bashcomplete.do_complete, and adapted to work in this situation. args = shlex.split(line[:begidx]) ctx = resolve_ctx(command, command.name, args[1:]) if ctx is None: return [] choices = [] if text and not text[:1].isalnum(): for param in ctx.command.params: if not isinstance(param, click.Option): continue choices.extend(param.opts) choices.extend(param.secondary_opts) elif isinstance(ctx.command, click.MultiCommand): choices.extend(ctx.command.list_commands(ctx)) return [cmd for cmd in choices if cmd.startswith(text)]