Привет, я пытаюсь сделать так, чтобы нажмите кнопку «пропустить» для варианта, если предыдущее значение что-то равно. Решение находится в этом связанном вопросе:
Щелкните параметр пароля, только если аргумент имеет значение
Однако это решение работает только в том случае, если параметр «зависимый» передается как параметр в командной строке. Если зависимое значение также должно быть запрошено для «args» и «opts», пусто.
def PromptIf(arg_name, arg_value):
class Cls(click.Option):
def __init__(self, *args, **kwargs):
kwargs['prompt'] = kwargs.get('prompt', True)
super(Cls, self).__init__(*args, **kwargs)
def handle_parse_result(self, ctx, opts, args):
assert any(c.name == arg_name for c in ctx.command.params), \
"Param '{}' not found for option '{}'".format(
arg_name, self.name)
if arg_name not in opts: #Is empty if previous values are promted for.
raise click.UsageError(
"Illegal usage: `%s` is a required parameter with" % (
arg_name))
# remove prompt from
if opts[arg_name] not in arg_value:
self.prompt = None
return super(Cls, self).handle_parse_result(ctx, opts, args)
return Cls
Есть предложения?