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, содержащий все введённые и распаршенные флаги.