feat: impl docs (#4)

The entire public api is covered with documentation in two languages - Russian and English.

the library now supports the latest three versions of python - 3.12, 3.13 and 3.14

minor design changes: now, when a Boolean flag is entered, its value is an empty string, not None.

tests have been adapted to the supported versions of python, readmi has been redesigned in two languages, German is no longer available.
This commit is contained in:
kolo
2025-12-04 21:55:19 +03:00
committed by GitHub
parent a2ac6a608f
commit ce7e24b924
210 changed files with 13770 additions and 1183 deletions
+130
View File
@@ -0,0 +1,130 @@
.. _root_error_handling:
Обработка ошибок
==========================================
``Argenta`` выбрасывает исключения в пограничных случаях, связанных с пользовательским вводом.
По умолчанию они обрабатываются системными обработчиками, но вы можете их переопределить. Это делается с помощью сеттеров экземпляра ``App`` вида ``.set_*_handler()``. Подробнее о каждом из них рассказано :ref:`ниже <possible_errors>`.
.. note::
Ни одно исключение не остаётся необработанным, так как для каждого случая предусмотрен стандартный обработчик. Поэтому переопределение является опциональным.
**Пример использования:**
.. literalinclude:: ../code_snippets/error_handling/snippet.py
:language: python
:linenos:
.. _possible_errors:
Возможные исключения и нестандартное поведение
----------------------------------------------
``UnprocessedInputFlagException``: Некорректный синтаксис флагов
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Это исключение выбрасывается, когда парсер не может обработать команду из-за некорректного синтаксиса. Чаще всего это связано с ошибкой в синтаксисе флагов. Подробнее о них можно прочитать в разделе :ref:`Flags <root_flags>`.
Стандартный обработчик выводит в консоль:
.. code-block:: shell
Incorrect flag syntax: <raw input command>
Для переопределения используется сеттер ``.set_incorrect_input_syntax_handler()``. Он принимает на вход обработчик с сигнатурой ``Callable[[str], None]``, где единственный аргумент — это строка с необработанной командой.
**Пример использования:**
.. literalinclude:: ../code_snippets/error_handling/snippet2.py
:language: python
:linenos:
---------------
``RepeatedInputFlagsException``: Повторяющиеся флаги в команде
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Исключение выбрасывается, если пользователь ввёл команду с повторяющимися флагами. Два флага (:ref:`InputFlag <root_api_command_input_flag>`) считаются одинаковыми, если у них совпадают имена. Подробнее о флагах и их синтаксисе — в разделе :ref:`Flags <root_flags>`.
.. note::
Сравнение на равенство у регистрируемых флагов (``Flag``) происходит иначе, подробнее в :ref:`Flag <root_flags>`.
Стандартный обработчик выводит в консоль:
.. code-block:: shell
Repeated input flags: <raw input command>
Для переопределения используется сеттер ``.set_repeated_input_flags_handler()``. Он принимает на вход обработчик с сигнатурой ``Callable[[str], None]``, где единственный аргумент — это строка с необработанной командой.
**Пример использования:**
.. literalinclude:: ../code_snippets/error_handling/snippet3.py
:language: python
:linenos:
---------------
``EmptyInputCommandException``: Введена пустая команда
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Исключение выбрасывается, если пользователь ввёл пустую строку или строку, состоящую только из пробельных символов (``\n``, ``\t``, пробел и т.д.).
Стандартный обработчик выводит в консоль:
.. code-block:: shell
Empty input command
Для переопределения используется сеттер ``.set_empty_command_handler()``. Он принимает на вход обработчик с сигнатурой ``Callable[[], None]`` (без аргументов).
**Пример использования:**
.. literalinclude:: ../code_snippets/error_handling/snippet4.py
:language: python
:linenos:
---------------
.. _root_error_handling_unknown_command:
Обработка неизвестной команды
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Это поведение активируется, когда пользователь вводит команду, которая не зарегистрирована ни в одном из роутеров и не является псевдонимом (alias) для существующей команды.
Стандартный обработчик выводит в консоль:
.. code-block:: shell
Unknown command: <trigger of the input command>
Для переопределения используется сеттер ``.set_unknown_command_handler()``. Он принимает на вход обработчик с сигнатурой ``Callable[[InputCommand], None]``, где аргумент — объект :ref:`InputCommand <root_api_command_input_command>`.
**Пример использования:**
.. literalinclude:: ../code_snippets/error_handling/snippet5.py
:language: python
:linenos:
---------------
Выход из приложения
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Это поведение активируется, когда пользователь вводит команду, помеченную как команда выхода.
Стандартный обработчик выводит в консоль текст и завершает работу приложения:
.. code-block:: shell
See you
Для переопределения используется сеттер ``.set_exit_command_handler()``. Он принимает на вход обработчик с сигнатурой ``Callable[[Response], None]``, где аргумент — объект :ref:`Response <root_api_response>`.
**Пример использования:**
.. literalinclude:: ../code_snippets/error_handling/snippet6.py
:language: python
:linenos: