Command¶
Command — это основная единица функциональности в приложении. Каждая команда связывает хэндлер с триггером, введя который он будет вызван для обработки.
Command инкапсулирует всю информацию о команде: её триггер (ключевое слово для вызова), описание, набор флагов и множество псевдонимов.
Инициализация¶
1__init__(self, trigger: str, *,
2 description: str | None = None,
3 flags: Flag | Flags = DEFAULT_WITHOUT_FLAGS,
4 aliases: set[str] = DEFAULT_WITHOUT_ALIASES) -> None
Создаёт новую команду для регистрации в роутере.
trigger: Строковый триггер, который пользователь вводит для вызова команды. Является основным идентификатором.description: Необязательное описание, объясняющее назначение команды. Отображается в справке.flags: Набор флагов для настройки поведения. Может быть одиночным объектомFlagили коллекциейFlags.aliases: Множество строковых псевдонимов для основного триггера.
Атрибуты:
- trigger¶
Основной триггер команды. Используется для её идентификации при обработке пользовательского ввода.
- description¶
Текстовое описание команды. Если не передано, используется значение по умолчанию.
- registered_flags¶
Объект
Flags, содержащий все зарегистрированные флаги. Если был переданFlag, то автоматически конвертируется из одиночного в коллекцию при инициализации.
- aliases¶
Множество строковых псевдонимов. Пуст, если псевдонимы не заданы.
Пример использования:
1from argenta.command import Flag, Flags, Command
2
3# Simple command without flags
4hello_cmd = Command("hello", description="Greet the user")
5
6# Command with description and aliases
7quit_cmd = Command("quit", description="Exit the application", aliases=["exit", "q"])
8
9# Command with flags
10deploy_cmd = Command(
11 "deploy",
12 description="Deploy application to server",
13 flags=Flags(
14 [
15 Flag("env", possible_values=["dev", "prod"]),
16 Flag("force"),
17 ]
18 ),
19 aliases=["dep"],
20)
См. также
Подробнее про флаги: Flags и Флаги команд.
Регистрация команд¶
Команды передаются в качестве аргумента в декоратор @router.command().
Базовый пример:
1from argenta import Command, Response, Router
2
3router = Router(title="User Management")
4
5
6@router.command(Command("create-user", description="Create a new user account"))
7def handle_create_user(response: Response):
8 print("Creating new user...")
9
10
11@router.command(
12 Command(
13 "delete-user",
14 description="Delete existing user account",
15 aliases=["remove-user", "rm-user"],
16 )
17)
18def handle_delete_user(response: Response):
19 print("Deleting user...")
Команды с флагами:
1from argenta import Command, Response, Router
2from argenta.command import Flag, Flags
3
4router = Router(title="Server Management")
5
6
7@router.command(
8 Command(
9 "start",
10 description="Start the server",
11 flags=Flags(
12 [
13 Flag("port"),
14 Flag("host"),
15 Flag("debug"),
16 ]
17 ),
18 aliases=["run"],
19 )
20)
21def handle_start(response: Response):
22 input_flags = response.input_flags
23 port_flag = input_flags.get_flag_by_name("port")
24 host_flag = input_flags.get_flag_by_name("host")
25 debug_flag = input_flags.get_flag_by_name("debug")
26
27 host = host_flag.input_value if host_flag else "localhost"
28 port = port_flag.input_value if port_flag else "8080"
29 debug = debug_flag and debug_flag.input_value
30
31 print(f"Starting server on {host}:{port}")
32 if debug:
33 print("Debug mode: ON")
Работа с псевдонимами¶
Псевдонимы позволяют вызывать один и тот же обработчик разными триггерами, сохраняя флаги и описание команды.
Пример с псевдонимами:
1from argenta import Router, Command, Response
2
3router = Router(title="System")
4
5
6@router.command(
7 Command(
8 "shutdown",
9 description="Shutdown the system",
10 aliases=["poweroff", "halt", "stop"]
11 )
12)
13def handle_shutdown(response: Response):
14 print("Shutting down the system...")
Теперь пользователь может вызвать команду любым из способов:
shutdown
poweroff
halt
stop
Все эти варианты вызовут один и тот же хэндлер handle_shutdown.
InputCommand¶
InputCommand представляет собой обработанную команду, введённую пользователем. Этот внутренний класс создаётся автоматически при обработке пользовательского ввода. Прямая работа с ним возможна при создании пользовательского обработчика для неизвестных команд.
См. также
Подробнее о пользовательских обработчиках исключений см. здесь.
Атрибуты:
- trigger
Строковый триггер, введённый пользователем.
- input_flags
Объект
InputFlags, содержащий все введённые и распаршенные флаги.