mirror of
https://github.com/koloideal/Argenta.git
synced 2026-06-10 18:15:28 +03:00
docs
This commit is contained in:
@@ -1,6 +1,4 @@
|
||||
from argenta.orchestrator.argparser.arguments import \
|
||||
BooleanArgument as BooleanArgument
|
||||
from argenta.orchestrator.argparser.arguments import \
|
||||
ValueArgument as ValueArgument
|
||||
from argenta.orchestrator.argparser.arguments import BooleanArgument as BooleanArgument
|
||||
from argenta.orchestrator.argparser.arguments import ValueArgument as ValueArgument
|
||||
from argenta.orchestrator.argparser.entity import ArgParser as ArgParser
|
||||
from argenta.orchestrator.argparser.entity import ArgSpace as ArgSpace
|
||||
|
||||
@@ -1,6 +1,3 @@
|
||||
from argenta.orchestrator.argparser.arguments.models import \
|
||||
BooleanArgument as BooleanArgument
|
||||
from argenta.orchestrator.argparser.arguments.models import \
|
||||
InputArgument as InputArgument
|
||||
from argenta.orchestrator.argparser.arguments.models import \
|
||||
ValueArgument as ValueArgument
|
||||
from argenta.orchestrator.argparser.arguments.models import BooleanArgument as BooleanArgument
|
||||
from argenta.orchestrator.argparser.arguments.models import InputArgument as InputArgument
|
||||
from argenta.orchestrator.argparser.arguments.models import ValueArgument as ValueArgument
|
||||
|
||||
@@ -1,8 +1,4 @@
|
||||
__all__ = [
|
||||
'BooleanArgument',
|
||||
'ValueArgument',
|
||||
'InputArgument'
|
||||
]
|
||||
__all__ = ["BooleanArgument", "ValueArgument", "InputArgument"]
|
||||
|
||||
from typing import Literal
|
||||
|
||||
@@ -11,10 +7,8 @@ class BaseArgument:
|
||||
"""
|
||||
Private. Base class for all arguments
|
||||
"""
|
||||
def __init__(self, name: str, *,
|
||||
help: str,
|
||||
is_deprecated: bool,
|
||||
prefix: Literal["-", "--", "---"]):
|
||||
|
||||
def __init__(self, name: str, *, help: str, is_deprecated: bool, prefix: Literal["-", "--", "---"]):
|
||||
"""
|
||||
Public. Boolean argument, does not require a value
|
||||
:param name: name of the argument
|
||||
@@ -33,13 +27,17 @@ class BaseArgument:
|
||||
|
||||
|
||||
class ValueArgument(BaseArgument):
|
||||
def __init__(self, name: str, *,
|
||||
prefix: Literal["-", "--", "---"] = "--",
|
||||
help: str = "Help message for the value argument",
|
||||
possible_values: list[str] | None = None,
|
||||
default: str | None = None,
|
||||
is_required: bool = False,
|
||||
is_deprecated: bool = False):
|
||||
def __init__(
|
||||
self,
|
||||
name: str,
|
||||
*,
|
||||
prefix: Literal["-", "--", "---"] = "--",
|
||||
help: str = "Help message for the value argument",
|
||||
possible_values: list[str] | None = None,
|
||||
default: str | None = None,
|
||||
is_required: bool = False,
|
||||
is_deprecated: bool = False,
|
||||
):
|
||||
"""
|
||||
Public. Value argument, must have the value
|
||||
:param name: name of the argument
|
||||
@@ -58,10 +56,14 @@ class ValueArgument(BaseArgument):
|
||||
|
||||
|
||||
class BooleanArgument(BaseArgument):
|
||||
def __init__(self, name: str, *,
|
||||
prefix: Literal["-", "--", "---"] = "--",
|
||||
help: str = "Help message for the boolean argument",
|
||||
is_deprecated: bool = False):
|
||||
def __init__(
|
||||
self,
|
||||
name: str,
|
||||
*,
|
||||
prefix: Literal["-", "--", "---"] = "--",
|
||||
help: str = "Help message for the boolean argument",
|
||||
is_deprecated: bool = False,
|
||||
):
|
||||
"""
|
||||
Public. Boolean argument, does not require a value
|
||||
:param name: name of the argument
|
||||
@@ -74,9 +76,7 @@ class BooleanArgument(BaseArgument):
|
||||
|
||||
|
||||
class InputArgument:
|
||||
def __init__(self, name: str,
|
||||
value: str | Literal[True],
|
||||
founder_class: type[BaseArgument]) -> None:
|
||||
def __init__(self, name: str, value: str | Literal[True], founder_class: type[BaseArgument]) -> None:
|
||||
self.name: str = name
|
||||
self.value: str | Literal[True] = value
|
||||
self.founder_class: type[BaseArgument] = founder_class
|
||||
|
||||
@@ -6,10 +6,12 @@ __all__ = [
|
||||
from argparse import ArgumentParser, Namespace
|
||||
from typing import Never, Self
|
||||
|
||||
from argenta.orchestrator.argparser.arguments.models import (BaseArgument,
|
||||
BooleanArgument,
|
||||
InputArgument,
|
||||
ValueArgument)
|
||||
from argenta.orchestrator.argparser.arguments.models import (
|
||||
BaseArgument,
|
||||
BooleanArgument,
|
||||
InputArgument,
|
||||
ValueArgument,
|
||||
)
|
||||
|
||||
|
||||
class ArgSpace:
|
||||
@@ -17,16 +19,16 @@ class ArgSpace:
|
||||
self.all_arguments = all_arguments
|
||||
|
||||
@classmethod
|
||||
def from_namespace(cls, namespace: Namespace,
|
||||
processed_args: list[ValueArgument | BooleanArgument]) -> Self:
|
||||
name_type_paired_args: dict[str, type[BaseArgument]] = {
|
||||
arg.name: type(arg)
|
||||
for arg in processed_args
|
||||
}
|
||||
return cls([InputArgument(name=name,
|
||||
value=value,
|
||||
founder_class=name_type_paired_args[name])
|
||||
for name, value in vars(namespace).items()])
|
||||
def from_namespace(
|
||||
cls, namespace: Namespace, processed_args: list[ValueArgument | BooleanArgument]
|
||||
) -> Self:
|
||||
name_type_paired_args: dict[str, type[BaseArgument]] = {arg.name: type(arg) for arg in processed_args}
|
||||
return cls(
|
||||
[
|
||||
InputArgument(name=name, value=value, founder_class=name_type_paired_args[name])
|
||||
for name, value in vars(namespace).items()
|
||||
]
|
||||
)
|
||||
|
||||
def get_by_name(self, name: str) -> InputArgument | None:
|
||||
for arg in self.all_arguments:
|
||||
@@ -41,7 +43,8 @@ class ArgSpace:
|
||||
class ArgParser:
|
||||
def __init__(
|
||||
self,
|
||||
processed_args: list[ValueArgument | BooleanArgument], *,
|
||||
processed_args: list[ValueArgument | BooleanArgument],
|
||||
*,
|
||||
name: str = "Argenta",
|
||||
description: str = "Argenta available arguments",
|
||||
epilog: str = "github.com/koloideal/Argenta | made by kolo",
|
||||
@@ -57,28 +60,30 @@ class ArgParser:
|
||||
self.description: str = description
|
||||
self.epilog: str = epilog
|
||||
self.processed_args: list[ValueArgument | BooleanArgument] = processed_args
|
||||
|
||||
|
||||
self.parsed_argspace: ArgSpace = ArgSpace([])
|
||||
|
||||
self._core: ArgumentParser = ArgumentParser(prog=name, description=description, epilog=epilog)
|
||||
self._register_args(processed_args)
|
||||
|
||||
def _parse_args(self) -> None:
|
||||
self.parsed_argspace = ArgSpace.from_namespace(namespace=self._core.parse_args(),
|
||||
processed_args=self.processed_args)
|
||||
|
||||
self.parsed_argspace = ArgSpace.from_namespace(
|
||||
namespace=self._core.parse_args(), processed_args=self.processed_args
|
||||
)
|
||||
|
||||
def _register_args(self, processed_args: list[ValueArgument | BooleanArgument]) -> None:
|
||||
for arg in processed_args:
|
||||
if isinstance(arg, BooleanArgument):
|
||||
_ = self._core.add_argument(arg.string_entity,
|
||||
action=arg.action,
|
||||
help=arg.help,
|
||||
deprecated=arg.is_deprecated)
|
||||
_ = self._core.add_argument(
|
||||
arg.string_entity, action=arg.action, help=arg.help, deprecated=arg.is_deprecated
|
||||
)
|
||||
else:
|
||||
_ = self._core.add_argument(arg.string_entity,
|
||||
action=arg.action,
|
||||
help=arg.help,
|
||||
default=arg.default,
|
||||
choices=arg.possible_values,
|
||||
required=arg.is_required,
|
||||
deprecated=arg.is_deprecated)
|
||||
_ = self._core.add_argument(
|
||||
arg.string_entity,
|
||||
action=arg.action,
|
||||
help=arg.help,
|
||||
default=arg.default,
|
||||
choices=arg.possible_values,
|
||||
required=arg.is_required,
|
||||
deprecated=arg.is_deprecated,
|
||||
)
|
||||
|
||||
@@ -11,9 +11,12 @@ DEFAULT_ARGPARSER: ArgParser = ArgParser(processed_args=[])
|
||||
|
||||
|
||||
class Orchestrator:
|
||||
def __init__(self, arg_parser: ArgParser = DEFAULT_ARGPARSER,
|
||||
custom_providers: list[Provider] = [],
|
||||
auto_inject_handlers: bool = True):
|
||||
def __init__(
|
||||
self,
|
||||
arg_parser: ArgParser = DEFAULT_ARGPARSER,
|
||||
custom_providers: list[Provider] = [],
|
||||
auto_inject_handlers: bool = True,
|
||||
):
|
||||
"""
|
||||
Public. An orchestrator and configurator that defines the behavior of an integrated system, one level higher than the App
|
||||
:param arg_parser: Cmd argument parser and configurator at startup
|
||||
@@ -31,7 +34,9 @@ class Orchestrator:
|
||||
:param app: a running application
|
||||
:return: None
|
||||
"""
|
||||
container = make_container(SystemProvider(self._arg_parser), *self._custom_providers)
|
||||
container = make_container(
|
||||
SystemProvider(), *self._custom_providers, context={ArgParser: self._arg_parser}
|
||||
)
|
||||
setup_dishka(app, container, auto_inject=self._auto_inject_handlers)
|
||||
|
||||
app.run_polling()
|
||||
|
||||
Reference in New Issue
Block a user