diff --git a/README2.md b/README2.md deleted file mode 100644 index 4842937..0000000 --- a/README2.md +++ /dev/null @@ -1,1199 +0,0 @@ -# Argenta - -Python library for creating TUI - -![preview](https://github.com/koloideal/Argenta/blob/kolo/imgs/mock_app_preview_last.png?raw=True) -Пример внешнего вида TUI, написанного с помощью Argenta - ---- - -# Installing -```bash -pip install argenta -``` -or -```bash -poetry add argenta -``` - ---- - -# Quick start - -Example of the simplest TUI with a single command -```python -# routers.py -from argenta.router import Router -from argenta.command import Command - - -router = Router() - -@router.command(Command("hello")) -def handler(): - print("Hello, world!") -``` - -```python -# main.py -from argenta.app import App -from argenta.orchestrator import Orchestrator -from routers import router - -app: App = App() -orchestrator: Orchestrator = Orchestrator() - - -def main() -> None: - app.include_router(router) - orchestrator.start_polling(app) - - -if __name__ == '__main__': - main() -``` -Example TUI with a command that has processed flags - -```python -# routers.py -import re -from argenta.router import Router -from argenta.command import Command -from argenta.orchestrator import Orchestrator -from argenta.command.flag.defaults import PredefinedFlags -from argenta.command.flag import Flags, Flag, InputFlags - -router = Router() - -registered_flags = Flags(PredefinedFlags.HOST, - Flag('port', '--', re.compile(r'^[0-9]{1,4}$'))) - - -@router.command(Command("hello")) -def handler(): - print("Hello, world!") - - -@router.command(Command(trigger="ssh", - description='connect via ssh', - flags=registered_flags)) -def handler_with_flags(flags: InputFlags): - for flag in flags: - print(f'Flag name: {flag.get_name()}\n' - f'Flag value: {flag.get_value()}') -``` - ---- - - - -# `argenta.app.autocompleter` - - - -## AutoCompleter Objects - -```python -class AutoCompleter() -``` - - - -#### \_\_init\_\_ - -```python -def __init__(history_filename: str = False, - autocomplete_button: str = 'tab') -> None -``` - -Public. Configures and implements auto-completion of input command - -**Arguments**: - -- `history_filename`: the name of the file for saving the history of the autocompleter -- `autocomplete_button`: the button for auto-completion - -**Returns**: - -None - ---- - - - -# `argenta.app.defaults` - - - -## PredefinedMessages Objects - -```python -@dataclass -class PredefinedMessages() -``` - -Public. A dataclass with predetermined messages for quick use - ---- - - - -# `argenta.app.dividing_line` - - - -## StaticDividingLine Objects - -```python -class StaticDividingLine(BaseDividingLine) -``` - - - -#### \_\_init\_\_ - -```python -def __init__(unit_part: str = '-', length: int = 25) -> None -``` - -Public. The static dividing line - -**Arguments**: - -- `unit_part`: the single part of the dividing line -- `length`: the length of the dividing line - -**Returns**: - -None - ---- - - - -## DynamicDividingLine Objects - -```python -class DynamicDividingLine(BaseDividingLine) -``` - - - -#### \_\_init\_\_ - -```python -def __init__(unit_part: str = '-') -> None -``` - -Public. The dynamic dividing line - -**Arguments**: - -- `unit_part`: the single part of the dividing line - -**Returns**: - -None - - - -#### get\_full\_dynamic\_line - -```python -def get_full_dynamic_line(length: int, is_override: bool) -> str -``` - -Private. Returns the full line of the dividing line - -**Arguments**: - -- `length`: the length of the dividing line -- `is_override`: has the default text layout been redefined - -**Returns**: - -full line of dividing line as str - - - -# argenta.app.dividing\_line - - - -# argenta.app.exceptions - - - -## NoRegisteredHandlersException Objects - -```python -class NoRegisteredHandlersException(Exception) -``` - -The router has no registered handlers - - - -# argenta.app.models - - - -## BaseApp Objects - -```python -class BaseApp() -``` - - - -#### set\_description\_message\_pattern - -```python -def set_description_message_pattern( - pattern: Callable[[str, str], str]) -> None -``` - -Public. Sets the output pattern of the available commands - -**Arguments**: - -- `pattern`: output pattern of the available commands - -**Returns**: - -None - - - -#### set\_invalid\_input\_flags\_handler - -```python -def set_invalid_input_flags_handler(handler: Callable[[str], None]) -> None -``` - -Public. Sets the handler for incorrect flags when entering a command - -**Arguments**: - -- `handler`: handler for incorrect flags when entering a command - -**Returns**: - -None - - - -#### set\_repeated\_input\_flags\_handler - -```python -def set_repeated_input_flags_handler(handler: Callable[[str], None]) -> None -``` - -Public. Sets the handler for repeated flags when entering a command - -**Arguments**: - -- `handler`: handler for repeated flags when entering a command - -**Returns**: - -None - - - -#### set\_unknown\_command\_handler - -```python -def set_unknown_command_handler(handler: Callable[[str], None]) -> None -``` - -Public. Sets the handler for unknown commands when entering a command - -**Arguments**: - -- `handler`: handler for unknown commands when entering a command - -**Returns**: - -None - - - -#### set\_empty\_command\_handler - -```python -def set_empty_command_handler(handler: Callable[[], None]) -> None -``` - -Public. Sets the handler for empty commands when entering a command - -**Arguments**: - -- `handler`: handler for empty commands when entering a command - -**Returns**: - -None - - - -#### set\_exit\_command\_handler - -```python -def set_exit_command_handler(handler: Callable[[], None]) -> None -``` - -Public. Sets the handler for exit command when entering a command - -**Arguments**: - -- `handler`: handler for exit command when entering a command - -**Returns**: - -None - - - -## App Objects - -```python -class App(BaseApp) -``` - - - -#### \_\_init\_\_ - -```python -def __init__(prompt: str = '[italic dim bold]What do you want to do?\n', - initial_message: str = '\nArgenta\n', - farewell_message: str = '\nSee you\n', - exit_command: Command = Command('Q', 'Exit command'), - system_router_title: str | None = 'System points:', - ignore_command_register: bool = True, - dividing_line: StaticDividingLine - | DynamicDividingLine = StaticDividingLine(), - repeat_command_groups: bool = True, - override_system_messages: bool = False, - autocompleter: AutoCompleter = AutoCompleter(), - print_func: Callable[[str], None] = Console().print) -> None -``` - -Public. The essence of the application itself. - -Configures and manages all aspects of the behavior and presentation of the user interacting with the user - -**Arguments**: - -- `prompt`: displayed before entering the command -- `initial_message`: displayed at the start of the app -- `farewell_message`: displayed at the end of the app -- `exit_command`: the entity of the command that will be terminated when entered -- `system_router_title`: system router title -- `ignore_command_register`: whether to ignore the case of the entered commands -- `dividing_line`: the entity of the dividing line -- `repeat_command_groups`: whether to repeat the available commands and their description -- `override_system_messages`: whether to redefine the default formatting of system messages -- `autocompleter`: the entity of the autocompleter -- `print_func`: system messages text output function - -**Returns**: - -None - - - -#### run\_polling - -```python -def run_polling() -> None -``` - -Private. Starts the user input processing cycle - -**Returns**: - -None - - - -#### include\_router - -```python -def include_router(router: Router) -> None -``` - -Public. Registers the router in the application - -**Arguments**: - -- `router`: registered router - -**Returns**: - -None - - - -#### include\_routers - -```python -def include_routers(*routers: Router) -> None -``` - -Public. Registers the routers in the application - -**Arguments**: - -- `routers`: registered routers - -**Returns**: - -None - - - -#### add\_message\_on\_startup - -```python -def add_message_on_startup(message: str) -> None -``` - -Public. Adds a message that will be displayed when the application is launched - -**Arguments**: - -- `message`: the message being added - -**Returns**: - -None - - - -# argenta.app.registered\_routers.entity - - - -## RegisteredRouters Objects - -```python -class RegisteredRouters() -``` - - - -#### \_\_init\_\_ - -```python -def __init__(registered_routers: list[Router] = None) -> None -``` - -Private. Combines registered routers - -**Arguments**: - -- `registered_routers`: list of the registered routers - -**Returns**: - -None - - - -#### get\_registered\_routers - -```python -def get_registered_routers() -> list[Router] -``` - -Private. Returns the registered routers - -**Returns**: - -registered routers as list[Router] - - - -#### add\_registered\_router - -```python -def add_registered_router(router: Router) -> None -``` - -Private. Adds a new registered router - -**Arguments**: - -- `router`: registered router - -**Returns**: - -None - - - -#### add\_registered\_routers - -```python -def add_registered_routers(*routers: Router) -> None -``` - -Private. Adds new registered routers - -**Arguments**: - -- `routers`: registered routers - -**Returns**: - -None - - - -# argenta.app.registered\_routers - - - -# argenta.app - - - -# argenta.command.exceptions - - - -## BaseInputCommandException Objects - -```python -class BaseInputCommandException(Exception) -``` - -Private. Base exception class for all exceptions raised when parse input command - - - -## UnprocessedInputFlagException Objects - -```python -class UnprocessedInputFlagException(BaseInputCommandException) -``` - -Private. Raised when an unprocessed input flag is detected - - - -## RepeatedInputFlagsException Objects - -```python -class RepeatedInputFlagsException(BaseInputCommandException) -``` - -Private. Raised when repeated input flags are detected - - - -## EmptyInputCommandException Objects - -```python -class EmptyInputCommandException(BaseInputCommandException) -``` - -Private. Raised when an empty input command is detected - - - -# argenta.command.flag.defaults - - - -## PredefinedFlags Objects - -```python -@dataclass -class PredefinedFlags() -``` - -Public. A dataclass with predefined flags and most frequently used flags for quick use - - - -# argenta.command.flag.models - - - -## BaseFlag Objects - -```python -class BaseFlag(ABC) -``` - - - -#### \_\_init\_\_ - -```python -def __init__(name: str, prefix: Literal['-', '--', '---'] = '--') -> None -``` - -Private. Base class for flags - -**Arguments**: - -- `name`: the name of the flag -- `prefix`: the prefix of the flag - -**Returns**: - -None - - - -#### get\_string\_entity - -```python -def get_string_entity() -> str -``` - -Public. Returns a string representation of the flag - -**Returns**: - -string representation of the flag as str - - - -#### get\_name - -```python -def get_name() -> str -``` - -Public. Returns the name of the flag - -**Returns**: - -the name of the flag as str - - - -#### get\_prefix - -```python -def get_prefix() -> str -``` - -Public. Returns the prefix of the flag - -**Returns**: - -the prefix of the flag as str - - - -## InputFlag Objects - -```python -class InputFlag(BaseFlag) -``` - - - -#### \_\_init\_\_ - -```python -def __init__(name: str, - prefix: Literal['-', '--', '---'] = '--', - value: str = None) -``` - -Public. The entity of the flag of the entered command - -**Arguments**: - -- `name`: the name of the input flag -- `prefix`: the prefix of the input flag -- `value`: the value of the input flag - -**Returns**: - -None - - - -#### get\_value - -```python -def get_value() -> str | None -``` - -Public. Returns the value of the flag - -**Returns**: - -the value of the flag as str - - - -#### set\_value - -```python -def set_value(value) -``` - -Private. Sets the value of the flag - -**Arguments**: - -- `value`: the fag value to set - -**Returns**: - -None - - - -## Flag Objects - -```python -class Flag(BaseFlag) -``` - - - -#### \_\_init\_\_ - -```python -def __init__(name: str, - prefix: Literal['-', '--', '---'] = '--', - possible_values: list[str] | Pattern[str] | False = True) -> None -``` - -Public. The entity of the flag being registered for subsequent processing - -**Arguments**: - -- `name`: The name of the flag -- `prefix`: The prefix of the flag -- `possible_values`: The possible values of the flag, if False then the flag cannot have a value - -**Returns**: - -None - - - -#### validate\_input\_flag\_value - -```python -def validate_input_flag_value(input_flag_value: str | None) -``` - -Private. Validates the input flag value - -**Arguments**: - -- `input_flag_value`: The input flag value to validate - -**Returns**: - -whether the entered flag is valid as bool - - - -## BaseFlags Objects - -```python -class BaseFlags(ABC) -``` - -Private. Base class for groups of flags - - - -#### get\_flags - -```python -@abstractmethod -def get_flags() -``` - -Public. Returns a list of flags - -**Returns**: - -list of flags - - - -#### add\_flag - -```python -@abstractmethod -def add_flag(flag: Flag | InputFlag) -``` - -Public. Adds a flag to the list of flags - -**Arguments**: - -- `flag`: flag to add - -**Returns**: - -None - - - -#### add\_flags - -```python -@abstractmethod -def add_flags(flags: list[Flag] | list[InputFlag]) -``` - -Public. Adds a list of flags to the list of flags - -**Arguments**: - -- `flags`: list of flags to add - -**Returns**: - -None - - - -#### get\_flag - -```python -@abstractmethod -def get_flag(name: str) -``` - -Public. Returns the flag entity by its name or None if not found - -**Arguments**: - -- `name`: the name of the flag to get - -**Returns**: - -entity of the flag or None - - - -# argenta.command.flag - - - -# argenta.command.models - - - -## BaseCommand Objects - -```python -class BaseCommand() -``` - - - -#### \_\_init\_\_ - -```python -def __init__(trigger: str) -> None -``` - -Private. Base class for all commands - -**Arguments**: - -- `trigger`: A string trigger, which, when entered by the user, indicates that the input corresponds to the command - - - -#### get\_trigger - -```python -def get_trigger() -> str -``` - -Returns the trigger of the command - -**Returns**: - -the trigger of the command as str - - - -## Command Objects - -```python -class Command(BaseCommand) -``` - - - -#### \_\_init\_\_ - -```python -def __init__(trigger: str, - description: str = None, - flags: Flag | Flags = None, - aliases: list[str] = None) -``` - -Public. The command that can and should be registered in the Router - -**Arguments**: - -- `trigger`: A string trigger, which, when entered by the user, indicates that the input corresponds to the command -- `description`: the description of the command -- `flags`: processed commands -- `aliases`: string synonyms for the main trigger - - - -# argenta.command - - - -# argenta.orchestrator.argparse.arguments.models - - - -## BaseArgument Objects - -```python -class BaseArgument(ABC) -``` - - - -#### get\_string\_entity - -```python -@abstractmethod -def get_string_entity() -``` - -Returns the string representation of the argument - - - - -## PositionalArgument Objects - -```python -class PositionalArgument(BaseArgument) -``` - - - -#### \_\_init\_\_ - -```python -def __init__(name: str) -``` - -Required argument at startup - -**Arguments**: - -- `name`: name of the argument, must not start with minus (-) - - - -## OptionalArgument Objects - -```python -class OptionalArgument(BaseArgument) -``` - - - -#### \_\_init\_\_ - -```python -def __init__(name: str, prefix: Literal['-', '--', '---'] = '--') -``` - -Optional argument, must have the value - -**Arguments**: - -- `name`: name of the argument -- `prefix`: prefix of the argument - - - -## BooleanArgument Objects - -```python -class BooleanArgument(BaseArgument) -``` - - - -#### \_\_init\_\_ - -```python -def __init__(name: str, prefix: Literal['-', '--', '---'] = '--') -``` - -Boolean argument, does not require a value - -**Arguments**: - -- `name`: name of the argument -- `prefix`: prefix of the argument - - - -# argenta.orchestrator.argparse.arguments - - - -# argenta.orchestrator.argparse.entity - - - -## ArgParse Objects - -```python -class ArgParse() -``` - - - -#### \_\_init\_\_ - -```python -def __init__( - processed_args: list[PositionalArgument | OptionalArgument - | BooleanArgument], - name: str = 'Argenta', - description: str = 'Argenta available arguments', - epilog: str = 'github.com/koloideal/Argenta | made by kolo') -> None -``` - -Cmd argument parser and configurator at startup - -**Arguments**: - -- `name`: the name of the ArgParse instance -- `description`: the description of the ArgParse instance -- `epilog`: the epilog of the ArgParse instance -- `processed_args`: registered and processed arguments - - - -#### set\_args - -```python -def set_args(*args: PositionalArgument | OptionalArgument | BooleanArgument) -``` - -Sets the arguments to be processed - -**Arguments**: - -- `args`: processed arguments - - - -#### register\_args - -```python -def register_args() -``` - -Registers initialized command line arguments - - - - -# argenta.orchestrator.argparse - - - -# argenta.orchestrator.entity - - - -## Orchestrator Objects - -```python -class Orchestrator() -``` - - - -#### \_\_init\_\_ - -```python -def __init__(arg_parser: ArgParse = False) -``` - -An orchestrator and configurator that defines the behavior of an integrated system, one level higher than the App - -**Arguments**: - -- `arg_parser`: Cmd argument parser and configurator at startup - - - -#### start\_polling - -```python -@staticmethod -def start_polling(app: App) -> None -``` - -Starting the user input processing cycle - -**Arguments**: - -- `app`: a running application - - - -#### get\_input\_args - -```python -def get_input_args() -> Namespace | None -``` - -Returns the arguments parsed - - - - -# argenta.orchestrator - - - -# argenta.router.command\_handler.entity - - - -# argenta.router.command\_handler - - - -# argenta.router.defaults - - - -# argenta.router.entity - - - -# argenta.router.exceptions - - - -# argenta.router - diff --git a/argenta/__init__.py b/argenta/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/argenta/orchestrator/argparse/__init__.py b/argenta/orchestrator/argparser/__init__.py similarity index 100% rename from argenta/orchestrator/argparse/__init__.py rename to argenta/orchestrator/argparser/__init__.py diff --git a/argenta/orchestrator/argparse/arguments/__init__.py b/argenta/orchestrator/argparser/arguments/__init__.py similarity index 100% rename from argenta/orchestrator/argparse/arguments/__init__.py rename to argenta/orchestrator/argparser/arguments/__init__.py diff --git a/argenta/orchestrator/argparse/arguments/models.py b/argenta/orchestrator/argparser/arguments/models.py similarity index 74% rename from argenta/orchestrator/argparse/arguments/models.py rename to argenta/orchestrator/argparser/arguments/models.py index 6cf6980..af6ec4c 100644 --- a/argenta/orchestrator/argparse/arguments/models.py +++ b/argenta/orchestrator/argparser/arguments/models.py @@ -3,11 +3,14 @@ from typing import Literal class BaseArgument(ABC): + """ + Private. Base class for all arguments + """ @abstractmethod - def get_string_entity(self): + def get_string_entity(self) -> str: """ - Returns the string representation of the argument - :return: + Public. Returns the string representation of the argument + :return: the string representation as a str """ pass @@ -15,7 +18,7 @@ class BaseArgument(ABC): class PositionalArgument(BaseArgument): def __init__(self, name: str): """ - Required argument at startup + Public. Required argument at startup :param name: name of the argument, must not start with minus (-) """ self.name = name @@ -27,7 +30,7 @@ class PositionalArgument(BaseArgument): class OptionalArgument(BaseArgument): def __init__(self, name: str, prefix: Literal['-', '--', '---'] = '--'): """ - Optional argument, must have the value + Public. Optional argument, must have the value :param name: name of the argument :param prefix: prefix of the argument """ @@ -41,7 +44,7 @@ class OptionalArgument(BaseArgument): class BooleanArgument(BaseArgument): def __init__(self, name: str, prefix: Literal['-', '--', '---'] = '--'): """ - Boolean argument, does not require a value + Public. Boolean argument, does not require a value :param name: name of the argument :param prefix: prefix of the argument """ diff --git a/argenta/orchestrator/argparse/entity.py b/argenta/orchestrator/argparser/entity.py similarity index 86% rename from argenta/orchestrator/argparse/entity.py rename to argenta/orchestrator/argparser/entity.py index 8055a7e..7c11119 100644 --- a/argenta/orchestrator/argparse/entity.py +++ b/argenta/orchestrator/argparser/entity.py @@ -12,7 +12,7 @@ class ArgParse: description: str = 'Argenta available arguments', epilog: str = 'github.com/koloideal/Argenta | made by kolo') -> None: """ - Cmd argument parser and configurator at startup + Public. Cmd argument parser and configurator at startup :param name: the name of the ArgParse instance :param description: the description of the ArgParse instance :param epilog: the epilog of the ArgParse instance @@ -25,18 +25,18 @@ class ArgParse: self.entity: ArgumentParser = ArgumentParser(prog=name, description=description, epilog=epilog) self.args: list[PositionalArgument | OptionalArgument | BooleanArgument] | None = processed_args - def set_args(self, *args: PositionalArgument | OptionalArgument | BooleanArgument): + def set_args(self, *args: PositionalArgument | OptionalArgument | BooleanArgument) -> None: """ - Sets the arguments to be processed + Public. Sets the arguments to be processed :param args: processed arguments - :return: + :return: None """ self.args.extend(args) - def register_args(self): + def register_args(self) -> None: """ - Registers initialized command line arguments - :return: + Private. Registers initialized command line arguments + :return: None """ if not self.args: return diff --git a/imgs/mock_app_preview.png b/imgs/mock_app_preview1.png similarity index 100% rename from imgs/mock_app_preview.png rename to imgs/mock_app_preview1.png diff --git a/imgs/mock_app_preview_last.png b/imgs/mock_app_preview2.png similarity index 100% rename from imgs/mock_app_preview_last.png rename to imgs/mock_app_preview2.png diff --git a/imgs/mock_app_preview3.png b/imgs/mock_app_preview3.png new file mode 100644 index 0000000..c8a9fc3 Binary files /dev/null and b/imgs/mock_app_preview3.png differ