docs and fix

This commit is contained in:
2025-10-21 22:56:29 +03:00
parent 90e80d3454
commit f38da15bdb
25 changed files with 215 additions and 45 deletions
+63 -1
View File
@@ -1,7 +1,69 @@
.. _root_api_orchestrator_index:
Orchestrator
****************
====================
Объект ``Orchestrator`` в ``Argenta`` представляет собой высокоуровневый компонент, который стоит над ``App`` и отвечает за "оркестрацию" всего приложения. Его главная задача — инициализация и конфигурация сложных систем, таких как внедрение зависимостей (``di``), парсинг аргументов командной строки при запуске, и запуск основного цикла приложения.
В то время как ``App`` отвечает за интерактивную сессию (ввод команд, роутинг), ``Orchestrator`` подготавливает окружение, в котором ``App`` будет работать. Он является точкой входа для приложений.
-----
Инициализация
-------------
.. code-block:: rust
:linenos:
DEFAULT_ARGPARSER: ArgParser = ArgParser(processed_args=[])
.. code-block:: python
:linenos:
def __init__(self, arg_parser: ArgParser = DEFAULT_ARGPARSER,
custom_providers: list[Provider] = [],
auto_inject_handlers: bool = True) -> None
Создает и конфигурирует экземпляр ``Orchestrator``.
* ``arg_parser``: Экземпляр :class:`argenta.orchestrator.argparser.ArgParser`, который отвечает за парсинг аргументов, переданных скрипту при запуске из командной строки (не путать с командами, вводимыми в интерактивном режиме).
* ``custom_providers``: Список пользовательских провайдеров ``dishka.Provider``. Это основной механизм для добавления ваших собственных сервисов (например, подключений к базе данных, клиентов API) в контейнер внедрения зависимостей.
* ``auto_inject_handlers``: Если **True** (по умолчанию), ``dishka`` будет автоматически инспектировать сигнатуры обработчиков команд и внедрять в них требуемые зависимости из контейнера.
-----
Основные методы
--------------
.. py:method:: start_polling(self, app: App) -> None
Это главный метод, который запускает все приложение. Он выполняет следующие шаги:
1. **Настройка DI**: На основе системного провайдера (``SystemProvider``, который предоставляет ``ArgParser``) и списка ``custom_providers`` создается ``ioc`` - контейнер и настраивается внедрение зависимостей.
3. **Запуск основного цикла**: Запускает бесконечный цикл ожидания и обработки пользовательского ввода.
:param app: Экземпляр класса :class:`~argenta.app.models.App`, который будет запущен.
-----
Назначение и использование
--------------------------
``Orchestrator`` абстрагирует от вас всю сложность, связанную с настройкой внедрения зависимостей и парсингом стартовых аргументов. Типичный сценарий использования ``Argenta`` выглядит следующим образом:
1. Создать экземпляр ``App`` и настроить его (добавить роутеры).
2. Создать экземпляр ``Orchestrator``, передав в него необходимые DI-провайдеры и, возможно, парсер аргументов.
3. Вызвать ``orchestrator.start_polling(app)``, чтобы запустить приложение.
Такой подход позволяет сохранить код чистым и разделяет ответственность: ``App`` отвечает за логику интерактивной сессии, а ``Orchestrator`` — за подготовку и запуск окружения.
Пример использования
--------------------
.. literalinclude:: ../../../code_snippets/orchestrator_snippet.py
:language: python
.. toctree::
:hidden: