mirror of
https://github.com/koloideal/Argenta.git
synced 2026-06-10 10:05:28 +03:00
fix public api
This commit is contained in:
@@ -1,6 +1,3 @@
|
|||||||
__all__ = ["App", "Orchestrator", "Router"]
|
from argenta.orchestrator.entity import Orchestrator as Orchestrator
|
||||||
|
from argenta.app.models import App as App
|
||||||
|
from argenta.router.entity import Router as Router
|
||||||
from argenta.orchestrator.entity import Orchestrator
|
|
||||||
from argenta.app.models import App
|
|
||||||
from argenta.router.entity import Router
|
|
||||||
|
|||||||
@@ -1,12 +1,4 @@
|
|||||||
__all__ = [
|
from argenta.app.models import App as App
|
||||||
"App",
|
from argenta.app.defaults import PredefinedMessages as PredefinedMessages
|
||||||
"PredefinedMessages",
|
from argenta.app.dividing_line.models import DynamicDividingLine as DynamicDividingLine, StaticDividingLine as StaticDividingLine
|
||||||
"DynamicDividingLine",
|
from argenta.app.autocompleter.entity import AutoCompleter as AutoCompleter
|
||||||
"StaticDividingLine",
|
|
||||||
"AutoCompleter"
|
|
||||||
]
|
|
||||||
|
|
||||||
from argenta.app.models import App
|
|
||||||
from argenta.app.defaults import PredefinedMessages
|
|
||||||
from argenta.app.dividing_line.models import DynamicDividingLine, StaticDividingLine
|
|
||||||
from argenta.app.autocompleter.entity import AutoCompleter
|
|
||||||
|
|||||||
@@ -1,4 +1 @@
|
|||||||
__all__ = ["AutoCompleter"]
|
from argenta.app.autocompleter.entity import AutoCompleter as AutoCompleter
|
||||||
|
|
||||||
|
|
||||||
from argenta.app.autocompleter.entity import AutoCompleter
|
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
__all__ = ["AutoCompleter"]
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import readline
|
import readline
|
||||||
from typing import Never
|
from typing import Never
|
||||||
@@ -38,7 +40,7 @@ class AutoCompleter:
|
|||||||
i += 1
|
i += 1
|
||||||
common_prefix = common_prefix[:i]
|
common_prefix = common_prefix[:i]
|
||||||
if state == 0:
|
if state == 0:
|
||||||
readline.insert_text(common_prefix[len(text) :])
|
readline.insert_text(common_prefix[len(text) :])
|
||||||
readline.redisplay()
|
readline.redisplay()
|
||||||
return None
|
return None
|
||||||
elif len(matches) == 1:
|
elif len(matches) == 1:
|
||||||
@@ -54,10 +56,10 @@ class AutoCompleter:
|
|||||||
"""
|
"""
|
||||||
if self.history_filename:
|
if self.history_filename:
|
||||||
if os.path.exists(self.history_filename):
|
if os.path.exists(self.history_filename):
|
||||||
readline.read_history_file(self.history_filename)
|
readline.read_history_file(self.history_filename)
|
||||||
else:
|
else:
|
||||||
for line in all_commands:
|
for line in all_commands:
|
||||||
readline.add_history(line)
|
readline.add_history(line)
|
||||||
|
|
||||||
readline.set_completer(self._complete)
|
readline.set_completer(self._complete)
|
||||||
readline.set_completer_delims(readline.get_completer_delims().replace(" ", ""))
|
readline.set_completer_delims(readline.get_completer_delims().replace(" ", ""))
|
||||||
@@ -69,7 +71,7 @@ class AutoCompleter:
|
|||||||
:return: None
|
:return: None
|
||||||
"""
|
"""
|
||||||
if self.history_filename:
|
if self.history_filename:
|
||||||
readline.write_history_file(self.history_filename)
|
readline.write_history_file(self.history_filename)
|
||||||
with open(self.history_filename, "r") as history_file:
|
with open(self.history_filename, "r") as history_file:
|
||||||
raw_history = history_file.read()
|
raw_history = history_file.read()
|
||||||
pretty_history: list[str] = []
|
pretty_history: list[str] = []
|
||||||
@@ -86,5 +88,5 @@ def _get_history_items() -> list[str] | list[Never]:
|
|||||||
"""
|
"""
|
||||||
return [
|
return [
|
||||||
readline.get_history_item(i)
|
readline.get_history_item(i)
|
||||||
for i in range(1, readline.get_current_history_length() + 1)
|
for i in range(1, readline.get_current_history_length() + 1)
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
__all__ = ["PredefinedMessages"]
|
||||||
|
|
||||||
from enum import StrEnum
|
from enum import StrEnum
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1 @@
|
|||||||
__all__ = ["StaticDividingLine", "DynamicDividingLine"]
|
from argenta.app.dividing_line.models import StaticDividingLine as StaticDividingLine, DynamicDividingLine as DynamicDividingLine
|
||||||
|
|
||||||
|
|
||||||
from argenta.app.dividing_line.models import StaticDividingLine, DynamicDividingLine
|
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
__all__ = ["StaticDividingLine", "DynamicDividingLine"]
|
||||||
|
|
||||||
from abc import ABC
|
from abc import ABC
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
__all__ = ["App"]
|
||||||
|
|
||||||
import io
|
import io
|
||||||
import re
|
import re
|
||||||
from contextlib import redirect_stdout
|
from contextlib import redirect_stdout
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
__all__ = ["NonStandardBehaviorHandler", "EmptyCommandHandler", "Printer", "DescriptionMessageGenerator"]
|
||||||
|
|
||||||
from typing import Protocol, TypeVar
|
from typing import Protocol, TypeVar
|
||||||
|
|
||||||
T = TypeVar('T', contravariant=True) # noqa: WPS111
|
T = TypeVar('T', contravariant=True) # noqa: WPS111
|
||||||
@@ -6,11 +8,11 @@ T = TypeVar('T', contravariant=True) # noqa: WPS111
|
|||||||
class NonStandardBehaviorHandler(Protocol[T]):
|
class NonStandardBehaviorHandler(Protocol[T]):
|
||||||
def __call__(self, __param: T) -> None:
|
def __call__(self, __param: T) -> None:
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
class EmptyCommandHandler(Protocol):
|
class EmptyCommandHandler(Protocol):
|
||||||
def __call__(self) -> None:
|
def __call__(self) -> None:
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
|
|
||||||
class Printer(Protocol):
|
class Printer(Protocol):
|
||||||
def __call__(self, __text: str) -> None:
|
def __call__(self, __text: str) -> None:
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
__all__ = ["RegisteredRouters"]
|
||||||
|
|
||||||
from typing import Iterator, Optional
|
from typing import Iterator, Optional
|
||||||
|
|
||||||
from argenta.router import Router
|
from argenta.router import Router
|
||||||
|
|||||||
@@ -1,12 +1,5 @@
|
|||||||
__all__ = [
|
from argenta.command.models import Command as Command, InputCommand as InputCommand
|
||||||
"Command",
|
from argenta.command.flag.defaults import PredefinedFlags as PredefinedFlags
|
||||||
"PossibleValues",
|
from argenta.command.flag import (Flag as Flag,
|
||||||
"PredefinedFlags",
|
Flags as Flags,
|
||||||
"InputCommand",
|
PossibleValues as PossibleValues)
|
||||||
"Flags",
|
|
||||||
"Flag"
|
|
||||||
]
|
|
||||||
|
|
||||||
from argenta.command.models import Command, InputCommand
|
|
||||||
from argenta.command.flag import defaults as PredefinedFlags
|
|
||||||
from argenta.command.flag import (Flag, Flags, PossibleValues)
|
|
||||||
|
|||||||
@@ -1,3 +1,10 @@
|
|||||||
|
__all__ = [
|
||||||
|
"InputCommandException",
|
||||||
|
"UnprocessedInputFlagException",
|
||||||
|
"RepeatedInputFlagsException",
|
||||||
|
"EmptyInputCommandException",
|
||||||
|
]
|
||||||
|
|
||||||
from argenta.command.flag.models import Flag, InputFlag
|
from argenta.command.flag.models import Flag, InputFlag
|
||||||
from abc import ABC, abstractmethod
|
from abc import ABC, abstractmethod
|
||||||
from typing import override
|
from typing import override
|
||||||
|
|||||||
@@ -1,11 +1,7 @@
|
|||||||
__all__ = [
|
from argenta.command.flag.models import (
|
||||||
"Flag",
|
Flag as Flag,
|
||||||
"InputFlag",
|
InputFlag as InputFlag,
|
||||||
"Flags",
|
PossibleValues as PossibleValues,
|
||||||
"PossibleValues",
|
ValidationStatus as ValidationStatus
|
||||||
"ValidationStatus"
|
)
|
||||||
]
|
from argenta.command.flag.flags.models import Flags as Flags
|
||||||
|
|
||||||
|
|
||||||
from argenta.command.flag.models import Flag, InputFlag, PossibleValues, ValidationStatus
|
|
||||||
from argenta.command.flag.flags.models import Flags
|
|
||||||
|
|||||||
@@ -1,27 +1,31 @@
|
|||||||
|
__all__ = ["PredefinedFlags"]
|
||||||
|
|
||||||
from typing import Literal
|
from typing import Literal
|
||||||
from argenta.command.flag.models import Flag, PossibleValues
|
from argenta.command.flag.models import Flag, PossibleValues
|
||||||
import re
|
import re
|
||||||
|
|
||||||
|
|
||||||
DEFAULT_PREFIX: Literal["-", "--", "---"] = "-"
|
DEFAULT_PREFIX: Literal["-", "--", "---"] = "-"
|
||||||
|
|
||||||
HELP = Flag(name="help", possible_values=PossibleValues.NEITHER)
|
|
||||||
SHORT_HELP = Flag(name="H", prefix=DEFAULT_PREFIX, possible_values=PossibleValues.NEITHER)
|
|
||||||
|
|
||||||
INFO = Flag(name="info", possible_values=PossibleValues.NEITHER) # noqa: WPS110
|
class PredefinedFlags:
|
||||||
SHORT_INFO = Flag(name="I", prefix=DEFAULT_PREFIX, possible_values=PossibleValues.NEITHER)
|
HELP = Flag(name="help", possible_values=PossibleValues.NEITHER)
|
||||||
|
SHORT_HELP = Flag(name="H", prefix=DEFAULT_PREFIX, possible_values=PossibleValues.NEITHER)
|
||||||
|
|
||||||
ALL = Flag(name="all", possible_values=PossibleValues.NEITHER)
|
INFO = Flag(name="info", possible_values=PossibleValues.NEITHER) # noqa: WPS110
|
||||||
SHORT_ALL = Flag(name="A", prefix=DEFAULT_PREFIX, possible_values=PossibleValues.NEITHER)
|
SHORT_INFO = Flag(name="I", prefix=DEFAULT_PREFIX, possible_values=PossibleValues.NEITHER)
|
||||||
|
|
||||||
HOST = Flag(
|
ALL = Flag(name="all", possible_values=PossibleValues.NEITHER)
|
||||||
name="host", possible_values=re.compile(r"^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$")
|
SHORT_ALL = Flag(name="A", prefix=DEFAULT_PREFIX, possible_values=PossibleValues.NEITHER)
|
||||||
)
|
|
||||||
SHORT_HOST = Flag(
|
|
||||||
name="H",
|
|
||||||
prefix=DEFAULT_PREFIX,
|
|
||||||
possible_values=re.compile(r"^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$"),
|
|
||||||
)
|
|
||||||
|
|
||||||
PORT = Flag(name="port", possible_values=re.compile(r"^\d{1,5}$"))
|
HOST = Flag(
|
||||||
SHORT_PORT = Flag(name="P", prefix=DEFAULT_PREFIX, possible_values=re.compile(r"^\d{1,5}$"))
|
name="host", possible_values=re.compile(r"^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$")
|
||||||
|
)
|
||||||
|
SHORT_HOST = Flag(
|
||||||
|
name="H",
|
||||||
|
prefix=DEFAULT_PREFIX,
|
||||||
|
possible_values=re.compile(r"^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$"),
|
||||||
|
)
|
||||||
|
|
||||||
|
PORT = Flag(name="port", possible_values=re.compile(r"^\d{1,5}$"))
|
||||||
|
SHORT_PORT = Flag(name="P", prefix=DEFAULT_PREFIX, possible_values=re.compile(r"^\d{1,5}$"))
|
||||||
|
|||||||
@@ -1,10 +1,4 @@
|
|||||||
__all__ = [
|
|
||||||
"Flags",
|
|
||||||
"InputFlags"
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
from argenta.command.flag.flags.models import (
|
from argenta.command.flag.flags.models import (
|
||||||
Flags,
|
Flags as Flags,
|
||||||
InputFlags
|
InputFlags as InputFlags
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
__all__ = ["Flags", "InputFlags"]
|
||||||
|
|
||||||
from argenta.command.flag.models import InputFlag, Flag
|
from argenta.command.flag.models import InputFlag, Flag
|
||||||
from typing import Generic, TypeVar, override
|
from typing import Generic, TypeVar, override
|
||||||
from collections.abc import Iterator
|
from collections.abc import Iterator
|
||||||
@@ -52,7 +54,7 @@ class Flags(BaseFlags[Flag]):
|
|||||||
:return: entity of the flag or None
|
:return: entity of the flag or None
|
||||||
"""
|
"""
|
||||||
return next((flag for flag in self.flags if flag.name == name), None)
|
return next((flag for flag in self.flags if flag.name == name), None)
|
||||||
|
|
||||||
@override
|
@override
|
||||||
def __eq__(self, other: object) -> bool:
|
def __eq__(self, other: object) -> bool:
|
||||||
if not isinstance(other, Flags):
|
if not isinstance(other, Flags):
|
||||||
@@ -82,9 +84,9 @@ class InputFlags(BaseFlags[InputFlag]):
|
|||||||
:return: entity of the flag or None
|
:return: entity of the flag or None
|
||||||
"""
|
"""
|
||||||
return next((flag for flag in self.flags if flag.name == name), None)
|
return next((flag for flag in self.flags if flag.name == name), None)
|
||||||
|
|
||||||
@override
|
@override
|
||||||
def __eq__(self, other: object) -> bool:
|
def __eq__(self, other: object) -> bool:
|
||||||
if not isinstance(other, InputFlags):
|
if not isinstance(other, InputFlags):
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
@@ -103,4 +105,3 @@ class InputFlags(BaseFlags[InputFlag]):
|
|||||||
return False
|
return False
|
||||||
else:
|
else:
|
||||||
raise TypeError
|
raise TypeError
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
__all__ = ["PossibleValues", "ValidationStatus", "Flag", "InputFlag"]
|
||||||
|
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
from re import Pattern
|
from re import Pattern
|
||||||
from typing import Literal, override
|
from typing import Literal, override
|
||||||
@@ -16,7 +18,7 @@ class ValidationStatus(Enum):
|
|||||||
|
|
||||||
class Flag:
|
class Flag:
|
||||||
def __init__(
|
def __init__(
|
||||||
self, name: str, *,
|
self, name: str, *,
|
||||||
prefix: Literal["-", "--", "---"] = "--",
|
prefix: Literal["-", "--", "---"] = "--",
|
||||||
possible_values: list[str] | Pattern[str] | PossibleValues = PossibleValues.ALL,
|
possible_values: list[str] | Pattern[str] | PossibleValues = PossibleValues.ALL,
|
||||||
) -> None:
|
) -> None:
|
||||||
@@ -47,7 +49,7 @@ class Flag:
|
|||||||
return input_flag_value in self.possible_values
|
return input_flag_value in self.possible_values
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def string_entity(self) -> str:
|
def string_entity(self) -> str:
|
||||||
"""
|
"""
|
||||||
@@ -56,17 +58,17 @@ class Flag:
|
|||||||
"""
|
"""
|
||||||
string_entity: str = self.prefix + self.name
|
string_entity: str = self.prefix + self.name
|
||||||
return string_entity
|
return string_entity
|
||||||
|
|
||||||
@override
|
@override
|
||||||
def __str__(self) -> str:
|
def __str__(self) -> str:
|
||||||
return self.string_entity
|
return self.string_entity
|
||||||
|
|
||||||
@override
|
@override
|
||||||
def __repr__(self) -> str:
|
def __repr__(self) -> str:
|
||||||
return f'Flag<name={self.name}, prefix={self.prefix}>'
|
return f'Flag<name={self.name}, prefix={self.prefix}>'
|
||||||
|
|
||||||
@override
|
@override
|
||||||
def __eq__(self, other: object) -> bool:
|
def __eq__(self, other: object) -> bool:
|
||||||
if isinstance(other, Flag):
|
if isinstance(other, Flag):
|
||||||
return self.string_entity == other.string_entity
|
return self.string_entity == other.string_entity
|
||||||
else:
|
else:
|
||||||
@@ -91,7 +93,7 @@ class InputFlag:
|
|||||||
self.prefix: Literal['-', '--', '---'] = prefix
|
self.prefix: Literal['-', '--', '---'] = prefix
|
||||||
self.input_value: str | None = input_value
|
self.input_value: str | None = input_value
|
||||||
self.status: ValidationStatus | None = status
|
self.status: ValidationStatus | None = status
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def string_entity(self) -> str:
|
def string_entity(self) -> str:
|
||||||
"""
|
"""
|
||||||
@@ -104,13 +106,13 @@ class InputFlag:
|
|||||||
@override
|
@override
|
||||||
def __str__(self) -> str:
|
def __str__(self) -> str:
|
||||||
return f'{self.string_entity} {self.input_value}'
|
return f'{self.string_entity} {self.input_value}'
|
||||||
|
|
||||||
@override
|
@override
|
||||||
def __repr__(self) -> str:
|
def __repr__(self) -> str:
|
||||||
return f'InputFlag<name={self.name}, prefix={self.prefix}, value={self.input_value}, status={self.status}>'
|
return f'InputFlag<name={self.name}, prefix={self.prefix}, value={self.input_value}, status={self.status}>'
|
||||||
|
|
||||||
@override
|
@override
|
||||||
def __eq__(self, other: object) -> bool:
|
def __eq__(self, other: object) -> bool:
|
||||||
if isinstance(other, InputFlag):
|
if isinstance(other, InputFlag):
|
||||||
return (
|
return (
|
||||||
self.name == other.name
|
self.name == other.name
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
__all__ = [
|
||||||
|
"Command",
|
||||||
|
"InputCommand"
|
||||||
|
]
|
||||||
|
|
||||||
from argenta.command.flag.models import Flag, InputFlag, ValidationStatus
|
from argenta.command.flag.models import Flag, InputFlag, ValidationStatus
|
||||||
from argenta.command.flag.flags.models import InputFlags, Flags
|
from argenta.command.flag.flags.models import InputFlags, Flags
|
||||||
from argenta.command.exceptions import (
|
from argenta.command.exceptions import (
|
||||||
@@ -20,7 +25,7 @@ DEFAULT_WITHOUT_INPUT_FLAGS: InputFlags = InputFlags()
|
|||||||
class Command:
|
class Command:
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
trigger: str, *,
|
trigger: str, *,
|
||||||
description: str | None = None,
|
description: str | None = None,
|
||||||
flags: Flag | Flags = DEFAULT_WITHOUT_FLAGS,
|
flags: Flag | Flags = DEFAULT_WITHOUT_FLAGS,
|
||||||
aliases: list[str] | None = None,
|
aliases: list[str] | None = None,
|
||||||
@@ -57,7 +62,7 @@ class Command:
|
|||||||
|
|
||||||
|
|
||||||
class InputCommand:
|
class InputCommand:
|
||||||
def __init__(self, trigger: str, *,
|
def __init__(self, trigger: str, *,
|
||||||
input_flags: InputFlag | InputFlags = DEFAULT_WITHOUT_INPUT_FLAGS):
|
input_flags: InputFlag | InputFlags = DEFAULT_WITHOUT_INPUT_FLAGS):
|
||||||
"""
|
"""
|
||||||
Private. The model of the input command, after parsing
|
Private. The model of the input command, after parsing
|
||||||
@@ -78,7 +83,7 @@ class InputCommand:
|
|||||||
trigger, input_flags = CommandParser(raw_command).parse_raw_command()
|
trigger, input_flags = CommandParser(raw_command).parse_raw_command()
|
||||||
|
|
||||||
return cls(trigger=trigger, input_flags=input_flags)
|
return cls(trigger=trigger, input_flags=input_flags)
|
||||||
|
|
||||||
|
|
||||||
class CommandParser:
|
class CommandParser:
|
||||||
def __init__(self, raw_command: str) -> None:
|
def __init__(self, raw_command: str) -> None:
|
||||||
@@ -113,24 +118,24 @@ class CommandParser:
|
|||||||
input_value=crnt_flg_val,
|
input_value=crnt_flg_val,
|
||||||
status=None
|
status=None
|
||||||
)
|
)
|
||||||
|
|
||||||
if input_flag in self._parsed_input_flags:
|
if input_flag in self._parsed_input_flags:
|
||||||
raise RepeatedInputFlagsException(input_flag)
|
raise RepeatedInputFlagsException(input_flag)
|
||||||
|
|
||||||
self._parsed_input_flags.add_flag(input_flag)
|
self._parsed_input_flags.add_flag(input_flag)
|
||||||
crnt_flg_name, crnt_flg_val = None, None
|
crnt_flg_name, crnt_flg_val = None, None
|
||||||
|
|
||||||
return (self._parsed_input_flags, crnt_flg_name, crnt_flg_val)
|
return (self._parsed_input_flags, crnt_flg_name, crnt_flg_val)
|
||||||
|
|
||||||
def _is_next_token_value(self, current_index: int,
|
def _is_next_token_value(self, current_index: int,
|
||||||
_tokens: list[str] | list[Never]) -> bool:
|
_tokens: list[str] | list[Never]) -> bool:
|
||||||
next_index = current_index + 1
|
next_index = current_index + 1
|
||||||
if next_index >= len(_tokens):
|
if next_index >= len(_tokens):
|
||||||
return False
|
return False
|
||||||
|
|
||||||
next_token = _tokens[next_index]
|
next_token = _tokens[next_index]
|
||||||
return not next_token.startswith(MIN_FLAG_PREFIX)
|
return not next_token.startswith(MIN_FLAG_PREFIX)
|
||||||
|
|
||||||
def _parse_single_token(
|
def _parse_single_token(
|
||||||
token: str,
|
token: str,
|
||||||
crnt_flag_name: str | None,
|
crnt_flag_name: str | None,
|
||||||
|
|||||||
@@ -20,9 +20,10 @@ def inject(func: Callable[..., T]) -> Callable[..., T]:
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def setup_dishka(app: App, *, auto_inject: bool = False) -> None:
|
def setup_dishka(app: App, container: Container, *, auto_inject: bool = False) -> None:
|
||||||
if auto_inject:
|
if auto_inject:
|
||||||
_auto_inject_handlers(app)
|
_auto_inject_handlers(app)
|
||||||
|
Response.patch_by_container(container)
|
||||||
|
|
||||||
|
|
||||||
def _get_container_from_response(
|
def _get_container_from_response(
|
||||||
@@ -33,7 +34,6 @@ def _get_container_from_response(
|
|||||||
if hasattr(arg, "_dishka_container"):
|
if hasattr(arg, "_dishka_container"):
|
||||||
return arg._dishka_container # pyright: ignore[reportPrivateUsage]
|
return arg._dishka_container # pyright: ignore[reportPrivateUsage]
|
||||||
break
|
break
|
||||||
|
|
||||||
raise RuntimeError("dishka container not found in Response")
|
raise RuntimeError("dishka container not found in Response")
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,7 @@
|
|||||||
|
__all__ = [
|
||||||
|
'SystemProvider',
|
||||||
|
]
|
||||||
|
|
||||||
from argenta.orchestrator.argparser import ArgParser
|
from argenta.orchestrator.argparser import ArgParser
|
||||||
from dishka import Provider, provide, Scope
|
from dishka import Provider, provide, Scope
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1 @@
|
|||||||
__all__ = ["get_time_of_pre_cycle_setup"]
|
from argenta.metrics.main import get_time_of_pre_cycle_setup as get_time_of_pre_cycle_setup
|
||||||
|
|
||||||
|
|
||||||
from argenta.metrics.main import get_time_of_pre_cycle_setup
|
|
||||||
|
|||||||
@@ -1,3 +1,7 @@
|
|||||||
|
__all__ = [
|
||||||
|
'get_time_of_pre_cycle_setup',
|
||||||
|
]
|
||||||
|
|
||||||
import io
|
import io
|
||||||
from contextlib import redirect_stdout
|
from contextlib import redirect_stdout
|
||||||
from time import time
|
from time import time
|
||||||
|
|||||||
@@ -1,4 +1,2 @@
|
|||||||
__all__ = ["ArgParser", "Orchestrator"]
|
from argenta.orchestrator.argparser.entity import ArgParser as ArgParser
|
||||||
|
from argenta.orchestrator.entity import Orchestrator as Orchestrator
|
||||||
from argenta.orchestrator.argparser.entity import ArgParser
|
|
||||||
from argenta.orchestrator.entity import Orchestrator
|
|
||||||
|
|||||||
@@ -1,9 +1,2 @@
|
|||||||
__all__ = [
|
from argenta.orchestrator.argparser.entity import ArgParser as ArgParser
|
||||||
"ArgParser",
|
from argenta.orchestrator.argparser.arguments import BooleanArgument as BooleanArgument, ValueArgument as ValueArgument
|
||||||
"BooleanArgument",
|
|
||||||
"ValueArgument"
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
from argenta.orchestrator.argparser.entity import ArgParser
|
|
||||||
from argenta.orchestrator.argparser.arguments import BooleanArgument, ValueArgument
|
|
||||||
|
|||||||
@@ -1,8 +1,5 @@
|
|||||||
__all__ = ["BooleanArgument", "ValueArgument", "InputArgument"]
|
|
||||||
|
|
||||||
|
|
||||||
from argenta.orchestrator.argparser.arguments.models import (
|
from argenta.orchestrator.argparser.arguments.models import (
|
||||||
BooleanArgument,
|
BooleanArgument as BooleanArgument,
|
||||||
ValueArgument,
|
ValueArgument as ValueArgument,
|
||||||
InputArgument
|
InputArgument as InputArgument
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -1,3 +1,9 @@
|
|||||||
|
__all__ = [
|
||||||
|
'BooleanArgument',
|
||||||
|
'ValueArgument',
|
||||||
|
'InputArgument'
|
||||||
|
]
|
||||||
|
|
||||||
from typing import Literal
|
from typing import Literal
|
||||||
|
|
||||||
|
|
||||||
@@ -20,7 +26,7 @@ class BaseArgument:
|
|||||||
self.help: str = help
|
self.help: str = help
|
||||||
self.is_deprecated: bool = is_deprecated
|
self.is_deprecated: bool = is_deprecated
|
||||||
self.prefix: Literal["-", "--", "---"] = prefix
|
self.prefix: Literal["-", "--", "---"] = prefix
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def string_entity(self) -> str:
|
def string_entity(self) -> str:
|
||||||
return self.prefix + self.name
|
return self.prefix + self.name
|
||||||
@@ -29,7 +35,7 @@ class BaseArgument:
|
|||||||
class ValueArgument(BaseArgument):
|
class ValueArgument(BaseArgument):
|
||||||
def __init__(self, name: str, *,
|
def __init__(self, name: str, *,
|
||||||
prefix: Literal["-", "--", "---"] = "--",
|
prefix: Literal["-", "--", "---"] = "--",
|
||||||
help: str = "Help message for the value argument",
|
help: str = "Help message for the value argument",
|
||||||
possible_values: list[str] | None = None,
|
possible_values: list[str] | None = None,
|
||||||
default: str | None = None,
|
default: str | None = None,
|
||||||
is_required: bool = False,
|
is_required: bool = False,
|
||||||
@@ -74,9 +80,9 @@ class InputArgument:
|
|||||||
self.name: str = name
|
self.name: str = name
|
||||||
self.value: str | None = value
|
self.value: str | None = value
|
||||||
self.founder_class: type[BaseArgument] = founder_class
|
self.founder_class: type[BaseArgument] = founder_class
|
||||||
|
|
||||||
def __str__(self) -> str:
|
def __str__(self) -> str:
|
||||||
return f"InputArgument({self.name}={self.value})"
|
return f"InputArgument({self.name}={self.value})"
|
||||||
|
|
||||||
def __repr__(self) -> str:
|
def __repr__(self) -> str:
|
||||||
return f"InputArgument<name={self.name}, value={self.value}, founder_class={self.founder_class.__name__}>"
|
return f"InputArgument<name={self.name}, value={self.value}, founder_class={self.founder_class.__name__}>"
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
__all__ = [
|
||||||
|
"ArgSpace",
|
||||||
|
"ArgParser",
|
||||||
|
]
|
||||||
|
|
||||||
from argparse import ArgumentParser, Namespace
|
from argparse import ArgumentParser, Namespace
|
||||||
from typing import Never, Self
|
from typing import Never, Self
|
||||||
|
|
||||||
@@ -8,32 +13,32 @@ from argenta.orchestrator.argparser.arguments.models import (
|
|||||||
ValueArgument
|
ValueArgument
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class ArgSpace:
|
class ArgSpace:
|
||||||
def __init__(self, all_arguments: list[InputArgument]) -> None:
|
def __init__(self, all_arguments: list[InputArgument]) -> None:
|
||||||
self.all_arguments = all_arguments
|
self.all_arguments = all_arguments
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def from_namespace(cls, namespace: Namespace,
|
def from_namespace(cls, namespace: Namespace,
|
||||||
processed_args: list[ValueArgument | BooleanArgument]) -> Self:
|
processed_args: list[ValueArgument | BooleanArgument]) -> Self:
|
||||||
name_type_paired_args: dict[str, type[BaseArgument]] = {
|
name_type_paired_args: dict[str, type[BaseArgument]] = {
|
||||||
arg.name: type(arg)
|
arg.name: type(arg)
|
||||||
for arg in processed_args
|
for arg in processed_args
|
||||||
}
|
}
|
||||||
return cls([InputArgument(name=name,
|
return cls([InputArgument(name=name,
|
||||||
value=value,
|
value=value,
|
||||||
founder_class=name_type_paired_args[name])
|
founder_class=name_type_paired_args[name])
|
||||||
for name, value in vars(namespace).items()])
|
for name, value in vars(namespace).items()])
|
||||||
|
|
||||||
def get_by_name(self, name: str) -> InputArgument | None:
|
def get_by_name(self, name: str) -> InputArgument | None:
|
||||||
for arg in self.all_arguments:
|
for arg in self.all_arguments:
|
||||||
if arg.name == name:
|
if arg.name == name:
|
||||||
return arg
|
return arg
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def get_by_type(self, arg_type: type[BaseArgument]) -> list[InputArgument] | list[Never]:
|
def get_by_type(self, arg_type: type[BaseArgument]) -> list[InputArgument] | list[Never]:
|
||||||
return [arg for arg in self.all_arguments if arg.founder_class is arg_type]
|
return [arg for arg in self.all_arguments if arg.founder_class is arg_type]
|
||||||
|
|
||||||
|
|
||||||
class ArgParser:
|
class ArgParser:
|
||||||
def __init__(
|
def __init__(
|
||||||
@@ -56,15 +61,15 @@ class ArgParser:
|
|||||||
self.processed_args: list[ValueArgument | BooleanArgument] = processed_args
|
self.processed_args: list[ValueArgument | BooleanArgument] = processed_args
|
||||||
|
|
||||||
self._core: ArgumentParser = ArgumentParser(prog=name, description=description, epilog=epilog)
|
self._core: ArgumentParser = ArgumentParser(prog=name, description=description, epilog=epilog)
|
||||||
|
|
||||||
for arg in processed_args:
|
for arg in processed_args:
|
||||||
if isinstance(arg, BooleanArgument):
|
if isinstance(arg, BooleanArgument):
|
||||||
_ = self._core.add_argument(arg.string_entity,
|
_ = self._core.add_argument(arg.string_entity,
|
||||||
action=arg.action,
|
action=arg.action,
|
||||||
help=arg.help,
|
help=arg.help,
|
||||||
deprecated=arg.is_deprecated)
|
deprecated=arg.is_deprecated)
|
||||||
else:
|
else:
|
||||||
_ = self._core.add_argument(arg.string_entity,
|
_ = self._core.add_argument(arg.string_entity,
|
||||||
action=arg.action,
|
action=arg.action,
|
||||||
help=arg.help,
|
help=arg.help,
|
||||||
default=arg.default,
|
default=arg.default,
|
||||||
@@ -75,4 +80,3 @@ class ArgParser:
|
|||||||
def parse_args(self) -> ArgSpace:
|
def parse_args(self) -> ArgSpace:
|
||||||
return ArgSpace.from_namespace(namespace=self._core.parse_args(),
|
return ArgSpace.from_namespace(namespace=self._core.parse_args(),
|
||||||
processed_args=self.processed_args)
|
processed_args=self.processed_args)
|
||||||
|
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
|
__all__ = ["Orchestrator"]
|
||||||
|
|
||||||
from argenta.app import App
|
from argenta.app import App
|
||||||
from argenta.response import Response
|
|
||||||
|
|
||||||
from argenta.orchestrator.argparser import ArgParser
|
from argenta.orchestrator.argparser import ArgParser
|
||||||
from argenta.di.integration import setup_dishka
|
from argenta.di.integration import setup_dishka
|
||||||
@@ -31,7 +32,6 @@ class Orchestrator:
|
|||||||
:return: None
|
:return: None
|
||||||
"""
|
"""
|
||||||
container = make_container(SystemProvider(self._arg_parser), *self._custom_providers)
|
container = make_container(SystemProvider(self._arg_parser), *self._custom_providers)
|
||||||
Response.patch_by_container(container)
|
setup_dishka(app, container, auto_inject=self._auto_inject_handlers)
|
||||||
setup_dishka(app, auto_inject=self._auto_inject_handlers)
|
|
||||||
|
|
||||||
app.run_polling()
|
app.run_polling()
|
||||||
|
|||||||
@@ -1,5 +1,2 @@
|
|||||||
__all__ = ["Response", "ResponseStatus"]
|
from argenta.response.entity import Response as Response
|
||||||
|
from argenta.response.status import ResponseStatus as ResponseStatus
|
||||||
|
|
||||||
from argenta.response.entity import Response
|
|
||||||
from argenta.response.status import ResponseStatus
|
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
__all__ = ["Response"]
|
||||||
|
|
||||||
from dishka import Container
|
from dishka import Container
|
||||||
|
|
||||||
from argenta.command.flag.flags.models import InputFlags
|
from argenta.command.flag.flags.models import InputFlags
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
__all__ = ["ResponseStatus"]
|
||||||
|
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1 @@
|
|||||||
from argenta.router.entity import Router
|
from argenta.router.entity import Router as Router
|
||||||
|
|
||||||
|
|
||||||
__all__ = ["Router"]
|
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
__all__ = ["CommandHandler", "CommandHandlers"]
|
||||||
|
|
||||||
from collections.abc import Iterator
|
from collections.abc import Iterator
|
||||||
from typing import Callable
|
from typing import Callable
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
__all__ = ["system_router"]
|
||||||
|
|
||||||
from argenta.router import Router
|
from argenta.router import Router
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
__all__ = ["Router"]
|
||||||
|
|
||||||
from typing import Callable, TypeAlias
|
from typing import Callable, TypeAlias
|
||||||
from inspect import getfullargspec, get_annotations, getsourcefile, getsourcelines
|
from inspect import getfullargspec, get_annotations, getsourcefile, getsourcelines
|
||||||
from rich.console import Console
|
from rich.console import Console
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
__all__ = ["RepeatedFlagNameException", "RequiredArgumentNotPassedException", "TriggerContainSpacesException"]
|
||||||
|
|
||||||
from typing import override
|
from typing import override
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user