добавление параметра справки в @app.cli.command()

#python #python-click

#python #python-щелчок

Вопрос:

Итак, я получил следующую команду click, работающую

 from flask import Flask

app = Flask(__name__)

@app.cli.command()
def hello():
    print("hello from inside flask")
  

затем попытался добавить к нему «справку» следующим образом:

 @app.cli.command()
@app.cli.argument(help='test command to say hello from inside flask')
def hello():
    print("hello from inside flask")
  

..но там говорилось

 AttributeError: 'AppGroup' object has no attribute 'argument'
  

Я считаю, что это должно сработать, если у вас есть

 import click
@click.option(help="use this command like this")
  

или

 @click.argument(help="use this command like this")
  

Кто-нибудь знает, как заставить это работать, если у вас есть @app.cli.command() ?

Ответ №1:

Click не поддерживает передачу help аргумента в click.argument , только в click.option . На это есть ссылки в нескольких местах в документах:

https://click.palletsprojects.com/en/7.x/documentation/#help-texts

Аргументы не могут быть задокументированы таким образом. Это делается для того, чтобы следовать общему соглашению инструментов Unix об использовании аргументов только для самых необходимых вещей и документировать их во вводном тексте, ссылаясь на них по имени.

https://click.palletsprojects.com/en/7.x/parameters/#differences

параметры полностью задокументированы на странице справки, аргументы — нет (это сделано намеренно, поскольку аргументы могут быть слишком специфичными для автоматического документирования)

https://click.palletsprojects.com/en/7.x/arguments/

Click также не будет пытаться документировать аргументы за вас и хочет, чтобы вы документировали их вручную, чтобы избежать уродливых страниц справки.

Вместо этого Click хотел бы, чтобы вы документировали аргументы непосредственно в строке документации команды. Это потому, что аргументы обычно более тесно интегрированы с текстом справки команды, поэтому Click не пытается написать это сам.

 import click

@click.command()
@click.argument("name")
def hello(name):
    """Say hello to NAME."""
    click.echo(f"Hello, {name}!")
  

Вы можете найти обсуждения и несколько примеров добавления аргумента help в системе отслеживания проблем Click:https://github.com/pallets/click/pull/1051. В настоящее время не планируется изменять то, как Click обрабатывает это.