.. _root_api_command_possible_values:


PossibleValues
==============

``PossibleValues`` — это перечисление, которое определяет специальные режимы валидации для значений флагов. ``PossibleValues`` используется в параметре ``possible_values`` класса ``Flag``, чтобы указать, может ли флаг принимать значения и какие ограничения на них накладываются.

``PossibleValues`` содержит два основных значения: ``NEITHER`` (для флагов, которые не могут принимать значения) и ``ALL`` (для флагов, принимающих любые значения). Это перечисление используется вместе со списками строк и регулярными выражениями для создания гибкой системы валидации.

.. note::
   Результат валидации доступен через атрибут ``status`` у экземпляра ``InputFlag``. Подробнее см. :ref:`здесь <root_api_command_input_flag>`.

.. seealso::

   Документация по :ref:`Flag <root_api_command_flag>` — класс флага, использующий ``PossibleValues``.
   
   Документация по :ref:`ValidationStatus <root_api_command_validation_status>` — результат валидации ввёденного флага.
   
   :ref:`Общая информация <root_flags>` о флагах и их использовании в приложении ``Argenta``

-----

NEITHER
~~~~~~~

.. code-block:: python
   :linenos:

   PossibleValues.NEITHER = 'NEITHER'

Указывает, что флаг **не должен** иметь значения.

Флаги с этим значением работают как булевы переключатели: их наличие в командной строке само по себе является информацией. Попытка передать такому флагу значение приведёт к ошибке валидации.

**Примеры флагов с** ``NEITHER``:

* ``--help`` — флаг справки
* ``--verbose`` — флаг подробного вывода
* ``--force`` — флаг принудительного выполнения
* ``-A`` / ``--all`` — флаг выбора всех элементов

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

.. literalinclude:: ../../../code_snippets/possible_values/neither.py
   :linenos:
   :language: python

-----

ALL
~~~

.. code-block:: python
   :linenos:

   PossibleValues.ALL = 'ALL'

Указывает, что флаг может принимать **любое** значение.

Флаги с этим значением универсальны и не накладывают ограничений на передаваемые данные. Валидация всегда будет успешной.

**Примеры флагов с** ``ALL``:

* ``--message`` — произвольное текстовое сообщение
* ``--name`` — произвольное имя

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

.. literalinclude:: ../../../code_snippets/possible_values/all.py
   :linenos:
   :language: python

-----

Параметр possible_values
~~~~~~~~~~~~~~~~~~~~~~~~~

``PossibleValues`` используется как один из возможных типов для параметра ``possible_values`` при создании экземпляра ``Flag``.

**Доступные типы для** ``possible_values``:

1.  ``PossibleValues.NEITHER``: флаг без значения.
2.  ``PossibleValues.ALL``: флаг с любым значением (по умолчанию).
3.  ``list[str]``: флаг с ограниченным набором значений.
4.  ``Pattern[str]``: флаг со значением, проверяемым по регулярному выражению.

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

.. literalinclude:: ../../../code_snippets/possible_values/combined.py
   :linenos:
   :language: python
