Если я вызываю подкоманду Click из другой команды, не похоже, что вызванная команда проверяет переданные поля. Я что-то не так делаю?
Это небольшой пример:
cli_main.py
import click
import cli_add
import cli_sub
import sys
@click.group()
@click.pass_context
def cli(ctx):
"""Main CLI"""
cli.add_command(cli_add.add)
cli.add_command(cli_sub.subtract)
if __name__ == "__main__":
sys.exit(cli())
cli_sub.py
import click
@click.group()
@click.pass_context
def subtract(ctx):
"""subtract"""
@subtract.command()
@click.option('--number', type=int, required=True)
@click.pass_context
def number(ctx, number):
click.echo("Subtract {}".format(number))
cli_add.py
import click
import cli_sub
@click.group()
@click.pass_context
def add(ctx):
"""add"""
@add.command()
@click.option('--number', type=int, required=True)
@click.pass_context
def number(ctx, number):
if number > 0:
click.echo("Add {}".format(number))
else:
ctx.invoke(cli_sub.number)
Пример звонков:
python cli_main.py add number --number 1
Add 1
python cli_main.py subtract number --number 1
Subtract 1
python cli_main.py subtract number
Usage: cli_main.py subtract number [OPTIONS]
Try "cli_main.py subtract number --help" for help.
Error: Missing option "--number".
Эти работы, как и ожидалось. Однако, если я позвоню по следующему, это не получится неожиданным образом.
python cli_main.py add number --number -1
Subtract None
Он вызывает метод вычитания. Проблема в том, что я не передаю параметр в своем вызове:
ctx.invoke(cli_sub.number)
Итак, я ожидаю, что это не удастся, и предоставлю мне текст использования, тем более что требуется опция number
.
Я правильно не вызываю эту подкоманду? Почему вызов, не вызывающий параметр, проверяет так же, как прямой вызов подкоманды без параметра?