App¶
Объект App — это ядро вашего консольного приложения. Он отвечает за конфигурацию, управление жизненным циклом, обработку команд и взаимодействие с пользователем, координируя работу всех компонентов: роутеров, обработчиков и системных сообщений.
Инициализация¶
1def __init__(
2 self,
3 *,
4 prompt: str = ">>> ",
5 initial_message: str = "Argenta",
6 farewell_message: str = "See you",
7 exit_command: Command = Command("q", description="Exit command"),
8 system_router_title: str = "System points:",
9 dividing_line: StaticDividingLine | DynamicDividingLine | None = None,
10 repeat_command_groups_printing: bool = False,
11 override_system_messages: bool = False,
12 autocompleter: AutoCompleter | None = None,
13 printer: Printer = Console().print,
14) -> None:
Создаёт и настраивает экземпляр приложения.
prompt: Приглашение к вводу, отображаемое перед каждой командой.
initial_message: Сообщение, выводимое при запуске приложения.
farewell_message: Сообщение, выводимое при выходе из приложения.
exit_command: Команда, которая маркируется как триггер для выхода из приложения.
system_router_title: Заголовок для системного роутера (содержит команду выхода).
dividing_line: Тип разделительной линии (StaticDividingLineилиDynamicDividingLine).
repeat_command_groups_printing: ЕслиTrue, список доступных команд выводится перед каждым вводом.
override_system_messages: ЕслиTrue, стандартное форматирование (цвета, ASCII-арт) отключается.
autocompleter: Экземпляр класса AutoCompleter, отвечающий за автодополнение команд.
printer: Функция для вывода всех системных сообщений.
Примечание
В приложениях на Argenta регистр вводимых команд не важен, проверка на существование и роутинг команд производится на основании триггеров, приведённых к нижнему регистру.
Основные методы¶
- include_router(self, router: Router) None¶
Регистрирует роутер в приложении. Все команды из этого роутера становятся доступными для вызова.
- Параметры:
router – Экземпляр
Routerдля регистрации.
- include_routers(self, *routers: Router) None¶
Регистрирует несколько роутеров одновременно.
- Параметры:
routers – Последовательность экземпляров
Routerдля регистрации.
- add_message_on_startup(self, message: str) None¶
Добавляет текстовое сообщение, которое выводится при запуске приложения после
initial_message.- Параметры:
message – Строка с сообщением.
См. также
Для вывода стандартных сообщений можно использовать готовые шаблоны из PredefinedMessages.
Методы установки обработчиков¶
App позволяет настраивать реакцию на различные события, такие как ошибки ввода или неизвестные команды.
Подсказка
Подробнее об исключениях и их обработке в соответствующем разделе документации.
- set_description_message_pattern(self, handler: Callable[[str, str], str]) None¶
Устанавливает шаблон для форматирования описания команды.
Обработчик принимает триггер команды (
str) и её описание (str).
- set_incorrect_input_syntax_handler(self, handler: Callable[[str], None]) None¶
Устанавливает обработчик при некорректном введённом синтаксисе флагов.
Обработчик принимает строку, введённую пользователем.
- set_repeated_input_flags_handler(self, handler: Callable[[str], None]) None¶
Устанавливает обработчик при повторяющихся флагах в введённой команде.
Обработчик принимает строку, введённую пользователем.
- set_unknown_command_handler(self, handler: Callable[[InputCommand], None]) None¶
Устанавливает обработчик при вводе неизвестной команды.
Обработчик принимает объект
InputCommand- объект введённой команды.
- set_empty_command_handler(self, handler: Callable[[], None]) None¶
Устанавливает обработчик при вводе пустой строки.
Обработчик не принимает аргументов.
- set_exit_command_handler(self, handler: Callable[[Response], None]) None¶
Переопределяет стандартное поведение при вызове команды выхода.
Обработчик принимает объект
Response.
PredefinedMessages¶
PredefinedMessages — это контейнер, содержащий набор готовых к использованию сообщений. Они отформатированы с использованием синтаксиса rich и предназначены для вывода стандартной информации, такой как подсказки по использованию.
Рекомендуется использовать их при старте приложения.
1from argenta import App, Orchestrator
2from argenta.app import PredefinedMessages
3
4app: App = App()
5orchestrator: Orchestrator = Orchestrator()
6
7def main():
8 app.add_message_on_startup(PredefinedMessages.USAGE)
9 app.add_message_on_startup(PredefinedMessages.AUTOCOMPLETE)
10 app.add_message_on_startup(PredefinedMessages.HELP)
11
12 orchestrator.start_polling(app)
13
14if __name__ == "__main__":
15 main()
- class PredefinedMessages
- USAGE¶
Строка:
[b dim]Usage[/b dim]: [i]<command> <[green]flags[/green]>[/i]Отображается как:
Usage: <command> <flags>
- HELP¶
Строка:
[b dim]Help[/b dim]: [i]<command>[/i] [b red]--help[/b red]Отображается как:
Help: <command> --help
- AUTOCOMPLETE¶
Строка:
[b dim]Autocomplete[/b dim]: [i]<part>[/i] [bold]<tab>Отображается как:
Autocomplete: <part> <tab>