InputFlags

InputFlags — это коллекция флагов, введённых пользователем. Её основная задача — группировать и управлять набором флагов, переданных вместе с командой. InputFlags служит контейнером, который позволяет удобно извлекать, итерировать и проверять наличие флагов, а также работать с их значениями и статусами валидации.

См. также

Документация по отдельным флагам (Flag, InputFlag)

Документация по InputFlags — коллекция обработанных флагов, введённых пользователем.

Документация по Response — объект ответа, содержащий InputFlags

Общая информация о флагах и их использовании в приложении Argenta


Инициализация

1__init__(self, flags: list[InputFlag] | None = None) -> None

Создаёт новую коллекцию введённых флагов.

  • flags: Необязательный список флагов типа InputFlag для инициализации коллекции. Если не указан, создаётся пустая коллекция.

Предупреждение

Экземпляры этого класса обычно не создаются напрямую. Они автоматически формируются системой при обработке пользовательского ввода и доступны через атрибут input_flags объекта Response.

Атрибуты:

flags

Список всех введённых флагов типа InputFlag. Пуст, если флаги не были переданы при инициализации или пользователь не ввёл их с командой.

Пример использования:

 1from argenta import Command, Response, Router
 2from argenta.command import Flag, Flags
 3
 4
 5router = Router(title="Example")
 6
 7@router.command(
 8    Command(
 9        "example",
10        description="Example command with flags",
11        flags=Flags([Flag("name"), Flag("age")]),
12    )
13)
14def example_handler(response: Response):
15    input_flags = response.input_flags
16
17    if input_flags:
18        print(f"Received {len(input_flags)} flag(s)")
19    else:
20        print("No flags provided")

Методы

get_flag_by_name

1get_flag_by_name(self, name: str) -> InputFlag | None

Возвращает флаг по имени.

param name:

Имя искомого флага (без префикса).

return:

Объект InputFlag или None, если флаг не найден.

Метод возвращает первый флаг с соответствующим именем (без учёта префикса).

Пример использования:

 1from argenta import Command, Response, Router
 2from argenta.command import Flag, Flags
 3
 4router = Router(title="Get Flag Example")
 5
 6
 7@router.command(
 8    Command(
 9        "config",
10        description="Configure settings",
11        flags=Flags([Flag("host"), Flag("port"), Flag("debug")]),
12    )
13)
14def config_handler(response: Response):
15    input_flags = response.input_flags
16
17    host_flag = input_flags.get_flag_by_name("host")
18    port_flag = input_flags.get_flag_by_name("port")
19    debug_flag = input_flags.get_flag_by_name("debug")
20
21    if host_flag:
22        print(f"Host: {host_flag.input_value}")
23
24    if port_flag:
25        print(f"Port: {port_flag.input_value}")
26
27    if debug_flag:
28        print("Debug mode enabled")
29
30    missing_flag = input_flags.get_flag_by_name("nonexistent")
31    if missing_flag is None:
32        print("Flag 'nonexistent' not found")

add_flag

1add_flag(self, flag: InputFlag) -> None

Добавляет введённый флаг в коллекцию.

param flag:

Флаг типа InputFlag для добавления.

return:

None.

Метод добавляет флаг в конец списка flags. Используется для динамического расширения коллекции.

Примечание

Этот метод используется редко, так как InputFlags обычно создаётся автоматически. Однако он может быть полезен для тестирования или ручного создания коллекций.

Пример использования:

 1from argenta import Command, Response, Router
 2from argenta.command.flag import InputFlag, ValidationStatus
 3from argenta.command import InputFlags
 4
 5router = Router(title="Add Flag Example")
 6
 7
 8@router.command(Command("test", description="Test command"))
 9def test_handler(response: Response):
10    # Create new InputFlags collection
11    new_flags = InputFlags()
12
13    # Add one flag
14    test_flag = InputFlag(
15        name="test", prefix="--", input_value="value", status=ValidationStatus.VALID
16    )
17    new_flags.add_flag(test_flag)
18
19    print(f"Flags count: {len(new_flags.flags)}")
20    print(f"First flag: {new_flags.flags[0].name}")

add_flags

1add_flags(self, flags: list[InputFlag]) -> None

Добавляет в коллекцию список введённых флагов.

param flags:

Список флагов типа InputFlag для добавления.

return:

None.

Метод расширяет коллекцию, добавляя в неё все флаги из переданного списка. Эффективен для пакетного добавления.

Пример использования:

 1from argenta.command.flag import InputFlag, ValidationStatus
 2from argenta.command import InputFlags
 3
 4# Create InputFlags collection
 5flags = InputFlags()
 6
 7# Create several flags
 8flag1 = InputFlag(name="option1", prefix="--", input_value="value1", status=ValidationStatus.VALID)
 9
10flag2 = InputFlag(name="option2", prefix="--", input_value="value2", status=ValidationStatus.VALID)
11
12flag3 = InputFlag(name="option3", prefix="---", input_value="value3", status=ValidationStatus.VALID)
13
14# Add all flags in one call
15flags.add_flags([flag1, flag2, flag3])
16
17print(f"Total flags: {len(flags.flags)}")
18for flag in flags:
19    print(f"  - {flag.string_entity}: {flag.input_value}")

Практические примеры

Обработка всех флагов с проверкой статусов

Пример использования:

 1from argenta import Command, Response, Router
 2from argenta.command import Flag, Flags, InputFlag
 3from argenta.command.flag import ValidationStatus
 4
 5router = Router(title="Comprehensive Example")
 6
 7
 8@router.command(
 9    Command(
10        "validate",
11        description="Validate all flags",
12        flags=Flags(
13            [
14                Flag("format", possible_values=["json", "xml"]),
15                Flag("output"),
16                Flag("force"),
17            ]
18        ),
19    )
20)
21def validate_handler(response: Response):
22    input_flags = response.input_flags
23
24    print("Flag validation results:")
25
26    valid_flags: list[InputFlag] = []
27    invalid_flags: list[InputFlag] = []
28    undefined_flags: list[InputFlag] = []
29
30    for flag in input_flags:
31        if flag.status == ValidationStatus.VALID:
32            valid_flags.append(flag)
33            print(f"  ✓ {flag.string_entity}: {flag.input_value} (VALID)")
34        elif flag.status == ValidationStatus.INVALID:
35            invalid_flags.append(flag)
36            print(f"  ✗ {flag.string_entity}: {flag.input_value} (INVALID)")
37        elif flag.status == ValidationStatus.UNDEFINED:
38            undefined_flags.append(flag)
39            print(f"  ? {flag.string_entity}: {flag.input_value} (UNDEFINED)")
40
41    print("\nSummary:")
42    print(f"  Valid flags: {len(valid_flags)}")
43    print(f"  Invalid flags: {len(invalid_flags)}")
44    print(f"  Undefined flags: {len(undefined_flags)}")
45
46    if valid_flags:
47        print("\nProcessing valid flags:")
48        for flag in valid_flags:
49            print(f"  Processing {flag.name} = {flag.input_value}")