Router¶
Router — это основной строительный блок для организации логики в приложении. Его задача — группировать связанные команды и их обработчики. Каждый роутер представляет собой логический контейнер для определённого набора функций.
Например, в приложении для управления пользователями один роутер может отвечать за аутентификацию (login, logout), а другой — за операции с профилем (profile-show, profile-edit).
Инициализация¶
1 __init__(self, title: str | None = None,
2 disable_redirect_stdout: bool = False) -> None
Создаёт новый экземпляр роутера.
title: Необязательный заголовок для группы команд. Отображается в списке доступных команд, помогая пользователю ориентироваться.disable_redirect_stdout: ЕслиTrue, отключает перехватstdoutдля всех команд этого роутера. Это необходимо для интерактивных команд (например, сinput()). При отключении перехвата автоматически используется статическая разделительная линия. Подробнее см. в разделе Переопределение стандартного вывода.
Регистрация команд¶
Для регистрации команды и привязки к ней обработчика используется декоратор @command.
- @command(self, command: Command | str)
Декоратор для регистрации функции как обработчика команды.
- Параметры:
command – Экземпляр
Command, описывающий триггер, флаги и описание команды. Может быть строкой, которая станет триггером (без возможности настройки флагов и описания).
Пример использования:
1from argenta import Command, Response, Router 2 3user_router = Router(title="User Management") 4 5@user_router.command(Command("add-user", description="Adds a new user")) 6def add_user_handler(response: Response): 7 print("User added successfully!")
Системный роутер¶
Argenta поставляется со встроенным системным роутером, который автоматически подключается к каждому приложению.
- system_router
Предопределённый экземпляр
Routerс базовыми системными командами (по умолчанию — команда выхода). Имеет заголовок «System points:», который можно переопределить вApp.Вы можете добавлять свои команды в этот роутер. Для этого используйте атрибут
.system_routerу созданного экхемпляраOrchestratorи используйте его декоратор@command.
Возможные исключения¶
При регистрации команд и флагов в Router могут возникнуть следующие исключения:
- exception TriggerContainSpacesException¶
Выбрасывается, если триггер команды в
Commandсодержит пробелы. Триггеры должны быть одним словом.Неправильно:
Command("add user")Правильно:
Command("add-user")
- exception RepeatedFlagNameException¶
Возникает, если при определении флагов для команды были использованы дублирующиеся имена. Имена флагов в рамках одной команды должны быть уникальны.
Пример, вызывающий исключение:
1Command("send", flags=[ 2 Flag("recipient"), 3 Flag("recipient") # Duplicate! 4])
- exception RequiredArgumentNotPassedException¶
Возникает, если обработчик команды не принимает обязательный аргумент
Response.
- exception RepeatedTriggerNameException¶
Возникает, если при регистрации команд в роутере были использованы дублирующиеся триггеры. Каждая команда должна иметь уникальный триггер в рамках приложения.
Пример, вызывающий исключение:
1router = Router() 2 3@router.command(Command("start")) 4def start_handler(response: Response) -> None: 5 pass 6 7@router.command(Command("start")) # Duplicate trigger! 8def another_start_handler(response: Response) -> None: 9 pass
- exception RepeatedAliasNameException¶
Возникает, если при регистрации команд были использованы дублирующиеся алиасы. Алиасы должны быть уникальны в рамках всего приложения.
Пример, вызывающий исключение:
1router = Router() 2 3@router.command(Command("start", aliases={"s", "run"})) 4def start_handler(response: Response) -> None: 5 pass 6 7@router.command(Command("begin", aliases={"s"})) # Duplicate alias "s"! 8def begin_handler(response: Response) -> None: 9 pass