pre-release v1.0.0

This commit is contained in:
2025-04-24 21:26:41 +03:00
parent 5bcae8fe68
commit 89f09c42f8
34 changed files with 78 additions and 40 deletions
+1 -1
View File
@@ -1,7 +1,7 @@
.venv
.idea
dist
poetry.lock
uv.lock
*__pycache__/
*.hist*
build
+1
View File
@@ -69,6 +69,7 @@
- [**RequiredArgumentNotPassedException** Objects](#requiredargumentnotpassedexception-objects)
- [**IncorrectNumberOfHandlerArgsException** Objects](#incorrectnumberofhandlerargsexception-objects)
- [**TriggerContainSpacesException** Objects](#triggercontainspacesexception-objects)
- [**Tests**](#tests)
</details>
---
+15 -14
View File
@@ -1,15 +1,21 @@
[project]
name = "argenta"
version = "0.5.0"
version = "1.0.0-alpha"
description = "Python library for creating TUI"
authors = [
{name = "kolo", email = "kolo.is.main@gmail.com"}
]
license = {text = "MIT"}
readme = "README.md"
authors = [{ name = "kolo", email = "kolo.is.main@gmail.com" }]
requires-python = ">=3.11, <4.0"
dependencies = ["rich (>=14.0.0,<15.0.0)", "art (>=6.4,<7.0)", "pyreadline3 (>=3.5.4,<4.0.0)"]
readme = "README.md"
license = { text = "MIT" }
dependencies = [
"rich (>=14.0.0,<15.0.0)",
"art (>=6.4,<7.0)",
"pyreadline3 (>=3.5.4,<4.0.0)",
]
[dependency-groups]
dev = [
"pydoc-markdown>=4.8.2,<5",
]
[tool.ruff]
exclude = [
@@ -21,12 +27,7 @@ exclude = [
"tests"
]
[build-system]
requires = ["poetry-core>=2.0.0,<3.0.0"]
build-backend = "poetry.core.masonry.api"
[tool.poetry.group.dev.dependencies]
sphinx = "^8.2.3"
pydoc-markdown = "^4.8.2"
requires = ["hatchling"]
build-backend = "hatchling.build"
@@ -346,7 +346,7 @@ class App(BaseApp):
continue
if self._is_exit_command(input_command):
system_router.input_command_handler(input_command)
system_router.finds_appropriate_handler(input_command)
self._autocompleter.exit_setup()
return
@@ -355,7 +355,7 @@ class App(BaseApp):
with redirect_stdout(io.StringIO()) as f:
for registered_router in self._registered_routers:
registered_router.input_command_handler(input_command)
registered_router.finds_appropriate_handler(input_command)
res: str = f.getvalue()
self._print_framed_text(res)
@@ -42,12 +42,25 @@ class Command(BaseCommand):
self._aliases = aliases if isinstance(aliases, list) else []
def get_registered_flags(self) -> Flags:
"""
Private. Returns the registered flags
:return: the registered flags as Flags
"""
return self._registered_flags
def get_aliases(self) -> list[str] | None:
def get_aliases(self) -> list[str] | list:
"""
Public. Returns the aliases of the command
:return: the aliases of the command as list[str] | list
"""
return self._aliases
def validate_input_flag(self, flag: InputFlag):
def validate_input_flag(self, flag: InputFlag) -> bool:
"""
Private. Validates the input flag
:param flag: input flag for validation
:return: is input flag valid as bool
"""
registered_flags: Flags | None = self.get_registered_flags()
if registered_flags:
if isinstance(registered_flags, Flag):
@@ -64,6 +77,10 @@ class Command(BaseCommand):
return False
def get_description(self) -> str:
"""
Private. Returns the description of the command
:return: the description of the command as str
"""
return self._description
@@ -71,18 +88,38 @@ class Command(BaseCommand):
class InputCommand(BaseCommand, Generic[InputCommandType]):
def __init__(self, trigger: str,
input_flags: InputFlag | InputFlags = None):
"""
Private. The model of the input command, after parsing
:param trigger:the trigger of the command
:param input_flags: the input flags
:return: None
"""
super().__init__(trigger)
self._input_flags: InputFlags = input_flags if isinstance(input_flags, InputFlags) else InputFlags(input_flags) if isinstance(input_flags, InputFlag) else InputFlags()
def _set_input_flags(self, input_flags: InputFlags):
def _set_input_flags(self, input_flags: InputFlags) -> None:
"""
Private. Sets the input flags
:param input_flags: the input flags to set
:return: None
"""
self._input_flags = input_flags
def get_input_flags(self) -> InputFlags:
"""
Private. Returns the input flags
:return: the input flags as InputFlags
"""
return self._input_flags
@staticmethod
def parse(raw_command: str) -> InputCommandType:
"""
Private. Parse the raw input command
:param raw_command: raw input command
:return: model of the input command, after parsing as InputCommand
"""
if not raw_command:
raise EmptyInputCommandException()
@@ -1,10 +1,10 @@
from typing import Callable
from inspect import getfullargspec
from argenta.command import Command
from argenta.command.models import InputCommand
from argenta.router.command_handler.entity import CommandHandlers, CommandHandler
from argenta.command.flag.models import Flag, Flags, InputFlags
from argenta.router.exceptions import (RepeatedFlagNameException,
from src.argenta.command import Command
from src.argenta.command.models import InputCommand
from src.argenta.router.command_handler.entity import CommandHandlers, CommandHandler
from src.argenta.command.flag.models import Flag, Flags, InputFlags
from src.argenta.router.exceptions import (RepeatedFlagNameException,
TooManyTransferredArgsException,
RequiredArgumentNotPassedException,
IncorrectNumberOfHandlerArgsException,
@@ -58,9 +58,9 @@ class Router:
self._not_valid_flag_handler = func
def input_command_handler(self, input_command: InputCommand) -> None:
def finds_appropriate_handler(self, input_command: InputCommand) -> None:
"""
Private. One handler for all input commands
Private. Finds the appropriate handler for given input command and passes control to it
:param input_command: input command as InputCommand
:return: None
"""
@@ -70,15 +70,14 @@ class Router:
for command_handler in self._command_handlers:
handle_command = command_handler.get_handled_command()
if input_command_name.lower() == handle_command.get_trigger().lower():
self._validate_input_command(input_command_flags, command_handler)
elif handle_command.get_aliases():
self.process_input_command(input_command_flags, command_handler)
if input_command_name.lower() in handle_command.get_aliases():
self._validate_input_command(input_command_flags, command_handler)
self.process_input_command(input_command_flags, command_handler)
def _validate_input_command(self, input_command_flags: InputFlags, command_handler: CommandHandler) -> None:
def process_input_command(self, input_command_flags: InputFlags, command_handler: CommandHandler) -> None:
"""
Private. Validates flags of input command
Private. Processes input command with the appropriate handler
:param input_command_flags: input command flags as InputFlags
:param command_handler: command handler for input command as CommandHandler
:return: None
+3 -3
View File
@@ -1,6 +1,6 @@
from argenta.router import Router
from argenta.command import Command
from argenta.router.exceptions import TriggerContainSpacesException
from src.argenta.router import Router
from src.argenta.command import Command
from src.argenta.router import TriggerContainSpacesException
import unittest