This commit is contained in:
2025-11-28 17:24:31 +03:00
parent d3bf5e703d
commit 47fda23431
3 changed files with 25 additions and 47 deletions
+5 -7
View File
@@ -1,15 +1,15 @@
from argenta import App, Orchestrator from argenta import App, Orchestrator
from argenta.orchestrator.argparser import ArgParser, ValueArgument from argenta.orchestrator.argparser import ArgParser, ValueArgument
# Определение аргументов приложения
arguments = [ arguments = [
ValueArgument("host", help="Server host", default="localhost"), ValueArgument("host", help="Server host", is_required=True),
ValueArgument("port", help="Server port", default="8080"), ValueArgument("port", help="Server port", is_required=True),
] ]
# Создание и запуск парсера
argparser = ArgParser( argparser = ArgParser(
processed_args=arguments, name="WebServer", description="Simple web server" processed_args=arguments,
name="WebServer",
description="Simple web server"
) )
app = App() app = App()
@@ -17,10 +17,8 @@ orchestrator = Orchestrator(argparser)
def main(): def main():
# Получение аргументов только после инициализации Orchestrator
argspace = argparser.parsed_argspace argspace = argparser.parsed_argspace
# Получение конкретных аргументов
host = argspace.get_by_name("host") host = argspace.get_by_name("host")
port = argspace.get_by_name("port") port = argspace.get_by_name("port")
+11
View File
@@ -0,0 +1,11 @@
config_arg = argspace.get_by_name("config")
if config_arg:
print(f"Config path: {config_arg.value}")
verbose_arg = argspace.get_by_name("verbose")
if verbose_arg and verbose_arg.value:
print("Verbose mode enabled")
unknown_arg = argspace.get_by_name("nonexistent")
if unknown_arg is None:
print("Argument not found")
+9 -40
View File
@@ -5,27 +5,20 @@ ArgSpace
``ArgSpace`` — это контейнер для хранения и управления обработанными аргументами командной строки. Его основная задача — предоставить удобный интерфейс для доступа к значениям, переданным при запуске приложения. ``ArgSpace`` — это контейнер для хранения и управления обработанными аргументами командной строки. Его основная задача — предоставить удобный интерфейс для доступа к значениям, переданным при запуске приложения.
``ArgSpace`` создаётся автоматически после обработки аргументов с помощью `ArgParser` и содержит коллекцию объектов `InputArgument`. ``ArgSpace`` создаётся автоматически после обработки аргументов с помощью ``ArgParser`` и содержит коллекцию объектов ``InputArgument``.
----- -----
Инициализация Инициализация
------------- -------------
.. code-block:: python Создание экземпляров класса ``ArgSpace`` происходит под `капотом`, вам не нужно создавать их вручную.
:linenos:
__init__(self, all_arguments: list[InputArgument]) -> None
Создаёт новое пространство аргументов.
* ``all_arguments``: Список обработанных аргументов в виде объектов `InputArgument`. Каждый элемент содержит имя, значение и тип исходного аргумента.
**Атрибуты:** **Атрибуты:**
.. py:attribute:: all_arguments .. py:attribute:: all_arguments
Список всех обработанных аргументов типа `InputArgument`, включая значения по умолчанию для не указанных параметров. Список всех обработанных аргументов типа ``InputArgument``.
----- -----
@@ -43,29 +36,13 @@ get_by_name
Возвращает аргумент по имени. Возвращает аргумент по имени.
:param name: Имя искомого аргумента. :param name: Имя искомого аргумента.
:return: Объект `InputArgument` или `None`, если аргумент не найден. :return: Объект ``InputArgument`` или ``None``, если аргумент не найден.
Метод выполняет линейный поиск по списку `all_arguments`. Если аргумент не найден, возвращается `None`.
**Пример использования:** **Пример использования:**
.. code-block:: python .. literalinclude:: ../../../code_snippets/argspace/snippet4.py
:linenos: :linenos:
# Получение значения конкретного аргумента
config_arg = argspace.get_by_name("config")
if config_arg:
print(f"Config path: {config_arg.value}")
verbose_arg = argspace.get_by_name("verbose")
if verbose_arg and verbose_arg.value:
print("Verbose mode enabled")
# Обработка отсутствующего аргумента
unknown_arg = argspace.get_by_name("nonexistent")
if unknown_arg is None:
print("Argument not found")
----- -----
get_by_type get_by_type
@@ -78,10 +55,10 @@ get_by_type
Возвращает все аргументы определённого типа. Возвращает все аргументы определённого типа.
:param arg_type: Тип аргумента (`BooleanArgument` или `ValueArgument`). :param arg_type: Тип аргумента (``BooleanArgument`` или ``ValueArgument``).
:return: Список аргументов указанного типа или пустой список. :return: Список аргументов указанного типа или пустой список.
Метод фильтрует `all_arguments` по атрибуту `founder_class` и возвращает аргументы, созданные из указанного типа. Метод фильтрует ``all_arguments`` по атрибуту ``founder_class`` и возвращает аргументы, созданные из указанного типа.
**Пример использования:** **Пример использования:**
@@ -101,14 +78,14 @@ InputArgument
Примеры испольования Примеры испольования
-------------------- --------------------
`ArgSpace` используется для доступа к значениям аргументов после запуска приложения. Типичный сценарий включает обработку аргументов через `ArgParser` и последующее извлечение значений из `ArgSpace`. ``ArgSpace`` используется для доступа к значениям аргументов после запуска приложения. Типичный сценарий включает обработку аргументов через ``ArgParser`` и последующее извлечение значений из ``ArgSpace``.
**Полный пример:** **Полный пример:**
.. literalinclude:: ../../../code_snippets/argspace/snippet.py .. literalinclude:: ../../../code_snippets/argspace/snippet.py
:linenos: :linenos:
Доступ к аргументам из обработчиков осуществляется с помощью DI. Подробнее см. :ref:`здесь <root_dependency_injection>`. Доступ к аргументам из обработчиков осуществляется с помощью ``di``. Подробнее см. :ref:`здесь <root_dependency_injection>`.
.. literalinclude:: ../../../code_snippets/argspace/snippet2.py .. literalinclude:: ../../../code_snippets/argspace/snippet2.py
:linenos: :linenos:
@@ -117,14 +94,6 @@ InputArgument
.. code-block:: bash .. code-block:: bash
# С параметрами по умолчанию
python server.py
# Output:
# Server configuration:
# Host: localhost
# Port: 8080
# С кастомными параметрами
python server.py --host 0.0.0.0 --port 9000 python server.py --host 0.0.0.0 --port 9000
# Output: # Output:
# Server configuration: # Server configuration: