ArgParser¶
ArgParser предназначен для обработки аргументов командной строки, передаваемых приложению при запуске. Важно не путать их с флагами, которые пользователь вводит в интерактивном режиме. ArgParser позволяет получать внешнюю конфигурацию в момент старта (например, путь к файлу настроек, флаги отладки или режим запуска).
Инициализация¶
1def __init__(self, processed_args: list[ValueArgument | BooleanArgument], *,
2 name: str = "Argenta",
3 description: str = "Argenta available arguments",
4 epilog: str = "github.com/koloideal/Argenta | made by kolo")
Создаёт экземпляр парсера аргументов командной строки.
processed_args: Список аргументов для обработки при запуске приложения. Подробнее см. здесь.name: Имя приложения для отображения в справке.description: Описание приложения для отображения в справке.epilog: Дополнительная информация для отображения в конце справки.
Атрибуты¶
- parsed_argspace: ArgSpace
Экземпляр
ArgSpace, содержащий все обработанные аргументы командной строки. Подробнее см. здесь.
Осторожно
До инициализации Orchestrator, в конструктор которого был передан экземпляр ArgParser, атрибут parsed_argspace будет содержать пустой ArgSpace.
Парсинг и валидация аргументов происходят при инициализации Orchestrator, поэтому использовать parsed_argspace целесообразно только после этого.
Лучшие практики¶
Использовать атрибут parsed_argspace рекомендуется только на этапе настройки приложения. В обработчиках лучшей практикой является получение ArgSpace через DI. Подробнее см. здесь.
Пример использования:
1from argenta import App, Orchestrator
2from argenta.orchestrator.argparser import ArgParser, BooleanArgument
3
4arg_parser = ArgParser(
5 processed_args=[
6 BooleanArgument("dev")
7 ]
8)
9orchestrator = Orchestrator(
10 arg_parser=arg_parser,
11)
12
13if __name__ == "__main__":
14 if arg_parser.parsed_argspace.get_by_name("dev"):
15 orchestrator.start_polling(App(initial_message="ArgentaDev"))
16 else:
17 orchestrator.start_polling(App())
Обработка ошибок¶
См. также
Про типы аргументов подробнее в Arguments
При работе с аргументами командной строки стандартный ArgumentParser автоматически обрабатывает следующие ситуации:
Отсутствие обязательного аргумента:
$ python app.py
usage: Argenta [-h] --config CONFIG
Argenta: error: the following arguments are required: --config
Недопустимое значение из списка possible_values:
$ python app.py --config app.yaml --log-level TRACE
usage: Argenta [-h] --log-level {DEBUG,INFO,WARNING,ERROR,CRITICAL}
Argenta: error: argument --log-level: invalid choice: 'TRACE'
Использование устаревшего аргумента:
При использовании аргумента с is_deprecated=True выводится предупреждение, но выполнение продолжается:
$ python app.py --old-param value
Warning: argument --old-param is deprecated
Предупреждение
Параметр поддерживается начиная с версии CPython 3.13, если версия ниже, то параметр будет игнорироваться.