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>