work on support args

This commit is contained in:
2025-04-13 19:24:03 +03:00
parent 34ebe55531
commit ba035881ee
12 changed files with 139 additions and 28 deletions
+3 -2
View File
@@ -44,11 +44,12 @@ from routers import router
app: App = App() app: App = App()
def main() -> None: def main() -> None:
app.include_router(router) app.include_router(router)
app.start_polling() app.run_polling()
if __name__ == '__main__': if __name__ == '__main__':
main() main()
``` ```
+1 -1
View File
@@ -216,7 +216,7 @@ class AppSetups(AppValidators, AppPrinters):
class App(AppSetters, AppNonStandardHandlers, AppSetups): class App(AppSetters, AppNonStandardHandlers, AppSetups):
def start_polling(self) -> None: def run_polling(self) -> None:
self._pre_cycle_setup() self._pre_cycle_setup()
while True: while True:
if self._repeat_command_groups_description: if self._repeat_command_groups_description:
+4
View File
@@ -0,0 +1,4 @@
__all__ = ["Orchestrator"]
from argenta.orchestrator.entity import Orchestrator
@@ -0,0 +1,6 @@
__all__ = ["BooleanArgument", "PositionalArgument", "OptionalArgument"]
from argenta.orchestrator.arguments.models import (BooleanArgument,
PositionalArgument,
OptionalArgument)
@@ -0,0 +1,50 @@
from abc import ABC, abstractmethod
from typing import Literal
class BaseArgument(ABC):
@abstractmethod
def get_string_entity(self):
"""
Returns the string representation of the argument
:return:
"""
pass
class PositionalArgument(BaseArgument):
def __init__(self, name: str):
"""
Required argument at startup
:param name: name of the argument, must not start with minus (-)
"""
self.name = name
def get_string_entity(self):
return self.name
class OptionalArgument(BaseArgument):
def __init__(self, name: str, prefix: Literal['-', '--', '---']):
"""
Optional argument, must have the value
:param name: name of the argument
:param prefix: prefix of the argument
"""
self.name = name
self.prefix = prefix
def get_string_entity(self):
return self.prefix + self.name
class BooleanArgument(BaseArgument):
def __init__(self, name: str):
"""
Boolean argument, does not require a value
:param name: name of the argument
"""
self.name = name
def get_string_entity(self):
return self.name
+4
View File
@@ -0,0 +1,4 @@
class ArgParse:
def __init__(self, name: str, description: str):
self.name = name
self.description = description
+42 -1
View File
@@ -1,2 +1,43 @@
from argparse import ArgumentParser
from argenta.app import App
from argenta.orchestrator.argparse.arguments import (PositionalArgument,
OptionalArgument,
BooleanArgument)
class Orchestrator: class Orchestrator:
pass def __init__(self, *args: PositionalArgument | OptionalArgument | BooleanArgument):
"""
An orchestrator and configurator that defines the behavior of an integrated system, one level higher than the App
:param args: logged command line arguments at startup
"""
self.args = args
self.argparse: ArgumentParser = ArgumentParser()
self._register_args()
@staticmethod
def start_polling(app: App) -> None:
"""
Starting the user input processing cycle
:param app: a running application
:return:
"""
app.run_polling()
def get_args(self):
return self.argparse.parse_args()
def _register_args(self):
"""
Registers initialized command line arguments
:return:
"""
for arg in self.args:
if type(arg) is PositionalArgument:
self.argparse.add_argument(arg.get_string_entity())
elif type(arg) is OptionalArgument:
self.argparse.add_argument(arg.get_string_entity())
elif type(arg) is BooleanArgument:
self.argparse.add_argument(arg.get_string_entity(), action='store_const')
+1 -1
View File
@@ -6,4 +6,4 @@ app = App(repeat_command_groups=True)
app.add_message_on_startup(PredeterminedMessages.USAGE + '\n\n') app.add_message_on_startup(PredeterminedMessages.USAGE + '\n\n')
app.start_polling() app.run_polling()
+8 -3
View File
@@ -4,11 +4,15 @@ from argenta.app import App
from argenta.app.defaults import PredeterminedMessages from argenta.app.defaults import PredeterminedMessages
from argenta.app.dividing_line import DynamicDividingLine from argenta.app.dividing_line import DynamicDividingLine
from argenta.app.autocompleter import AutoCompleter from argenta.app.autocompleter import AutoCompleter
from argenta.orchestrator import Orchestrator
from argenta.orchestrator.argparse.arguments import (PositionalArgument,
OptionalArgument,
BooleanArgument)
autocompleter = AutoCompleter('./mock/.hist')
app: App = App(dividing_line=DynamicDividingLine(), app: App = App(dividing_line=DynamicDividingLine(),
autocompleter=autocompleter) autocompleter=AutoCompleter('./mock/.hist'))
orchestrator: Orchestrator = Orchestrator(PositionalArgument('name'))
def main(): def main():
@@ -18,7 +22,8 @@ def main():
app.add_message_on_startup(PredeterminedMessages.AUTOCOMPLETE) app.add_message_on_startup(PredeterminedMessages.AUTOCOMPLETE)
app.add_message_on_startup(PredeterminedMessages.HELP) app.add_message_on_startup(PredeterminedMessages.HELP)
app.start_polling() print(orchestrator.get_args())
#orchestrator.start_polling(app)
if __name__ == "__main__": if __name__ == "__main__":
main() main()
@@ -26,7 +26,7 @@ class TestSystemHandlerNormalWork(unittest.TestCase):
print_func=print) print_func=print)
app.include_router(router) app.include_router(router)
app.set_unknown_command_handler(lambda command: print(f'Unknown command: {command.get_trigger()}')) app.set_unknown_command_handler(lambda command: print(f'Unknown command: {command.get_trigger()}'))
app.start_polling() app.run_polling()
output = mock_stdout.getvalue() output = mock_stdout.getvalue()
@@ -47,7 +47,7 @@ class TestSystemHandlerNormalWork(unittest.TestCase):
print_func=print) print_func=print)
app.include_router(router) app.include_router(router)
app.set_unknown_command_handler(lambda command: print(f'Unknown command: {command.get_trigger()}')) app.set_unknown_command_handler(lambda command: print(f'Unknown command: {command.get_trigger()}'))
app.start_polling() app.run_polling()
output = mock_stdout.getvalue() output = mock_stdout.getvalue()
@@ -66,7 +66,7 @@ class TestSystemHandlerNormalWork(unittest.TestCase):
app = App(override_system_messages=True, app = App(override_system_messages=True,
print_func=print) print_func=print)
app.include_router(router) app.include_router(router)
app.start_polling() app.run_polling()
output = mock_stdout.getvalue() output = mock_stdout.getvalue()
@@ -85,7 +85,7 @@ class TestSystemHandlerNormalWork(unittest.TestCase):
app = App(override_system_messages=True, app = App(override_system_messages=True,
print_func=print) print_func=print)
app.include_router(router) app.include_router(router)
app.start_polling() app.run_polling()
output = mock_stdout.getvalue() output = mock_stdout.getvalue()
@@ -105,7 +105,7 @@ class TestSystemHandlerNormalWork(unittest.TestCase):
app = App(override_system_messages=True, app = App(override_system_messages=True,
print_func=print) print_func=print)
app.include_router(router) app.include_router(router)
app.start_polling() app.run_polling()
output = mock_stdout.getvalue() output = mock_stdout.getvalue()
@@ -125,7 +125,7 @@ class TestSystemHandlerNormalWork(unittest.TestCase):
print_func=print) print_func=print)
app.include_router(router) app.include_router(router)
app.set_unknown_command_handler(lambda command: print(f'Unknown command: {command.get_trigger()}')) app.set_unknown_command_handler(lambda command: print(f'Unknown command: {command.get_trigger()}'))
app.start_polling() app.run_polling()
output = mock_stdout.getvalue() output = mock_stdout.getvalue()
@@ -149,7 +149,7 @@ class TestSystemHandlerNormalWork(unittest.TestCase):
print_func=print) print_func=print)
app.include_router(router) app.include_router(router)
app.set_unknown_command_handler(lambda command: print(f'Unknown command: {command.get_trigger()}')) app.set_unknown_command_handler(lambda command: print(f'Unknown command: {command.get_trigger()}'))
app.start_polling() app.run_polling()
output = mock_stdout.getvalue() output = mock_stdout.getvalue()
@@ -169,7 +169,7 @@ class TestSystemHandlerNormalWork(unittest.TestCase):
print_func=print) print_func=print)
app.include_router(router) app.include_router(router)
app.set_invalid_input_flags_handler(lambda command: print(f'Incorrect flag syntax: "{command}"')) app.set_invalid_input_flags_handler(lambda command: print(f'Incorrect flag syntax: "{command}"'))
app.start_polling() app.run_polling()
output = mock_stdout.getvalue() output = mock_stdout.getvalue()
@@ -189,7 +189,7 @@ class TestSystemHandlerNormalWork(unittest.TestCase):
print_func=print) print_func=print)
app.include_router(router) app.include_router(router)
app.set_empty_command_handler(lambda: print('Empty input command')) app.set_empty_command_handler(lambda: print('Empty input command'))
app.start_polling() app.run_polling()
output = mock_stdout.getvalue() output = mock_stdout.getvalue()
@@ -209,7 +209,7 @@ class TestSystemHandlerNormalWork(unittest.TestCase):
print_func=print) print_func=print)
app.include_router(router) app.include_router(router)
app.set_repeated_input_flags_handler(lambda command: print(f'Repeated input flags: "{command}"')) app.set_repeated_input_flags_handler(lambda command: print(f'Repeated input flags: "{command}"'))
app.start_polling() app.run_polling()
output = mock_stdout.getvalue() output = mock_stdout.getvalue()
@@ -25,7 +25,7 @@ class TestSystemHandlerNormalWork(unittest.TestCase):
app = App(override_system_messages=True, app = App(override_system_messages=True,
print_func=print) print_func=print)
app.include_router(router) app.include_router(router)
app.start_polling() app.run_polling()
output = mock_stdout.getvalue() output = mock_stdout.getvalue()
@@ -45,7 +45,7 @@ class TestSystemHandlerNormalWork(unittest.TestCase):
override_system_messages=True, override_system_messages=True,
print_func=print) print_func=print)
app.include_router(router) app.include_router(router)
app.start_polling() app.run_polling()
output = mock_stdout.getvalue() output = mock_stdout.getvalue()
@@ -65,7 +65,7 @@ class TestSystemHandlerNormalWork(unittest.TestCase):
app = App(override_system_messages=True, app = App(override_system_messages=True,
print_func=print) print_func=print)
app.include_router(router) app.include_router(router)
app.start_polling() app.run_polling()
output = mock_stdout.getvalue() output = mock_stdout.getvalue()
@@ -84,7 +84,7 @@ class TestSystemHandlerNormalWork(unittest.TestCase):
app = App(override_system_messages=True, app = App(override_system_messages=True,
print_func=print) print_func=print)
app.include_router(router) app.include_router(router)
app.start_polling() app.run_polling()
output = mock_stdout.getvalue() output = mock_stdout.getvalue()
@@ -104,7 +104,7 @@ class TestSystemHandlerNormalWork(unittest.TestCase):
app = App(override_system_messages=True, app = App(override_system_messages=True,
print_func=print) print_func=print)
app.include_router(router) app.include_router(router)
app.start_polling() app.run_polling()
output = mock_stdout.getvalue() output = mock_stdout.getvalue()
@@ -125,7 +125,7 @@ class TestSystemHandlerNormalWork(unittest.TestCase):
app = App(override_system_messages=True, app = App(override_system_messages=True,
print_func=print) print_func=print)
app.include_router(router) app.include_router(router)
app.start_polling() app.run_polling()
output = mock_stdout.getvalue() output = mock_stdout.getvalue()
@@ -145,7 +145,7 @@ class TestSystemHandlerNormalWork(unittest.TestCase):
app = App(override_system_messages=True, app = App(override_system_messages=True,
print_func=print) print_func=print)
app.include_router(router) app.include_router(router)
app.start_polling() app.run_polling()
output = mock_stdout.getvalue() output = mock_stdout.getvalue()
@@ -165,7 +165,7 @@ class TestSystemHandlerNormalWork(unittest.TestCase):
app = App(override_system_messages=True, app = App(override_system_messages=True,
print_func=print) print_func=print)
app.include_router(router) app.include_router(router)
app.start_polling() app.run_polling()
output = mock_stdout.getvalue() output = mock_stdout.getvalue()
@@ -188,7 +188,7 @@ class TestSystemHandlerNormalWork(unittest.TestCase):
app = App(override_system_messages=True, app = App(override_system_messages=True,
print_func=print) print_func=print)
app.include_router(router) app.include_router(router)
app.start_polling() app.run_polling()
output = mock_stdout.getvalue() output = mock_stdout.getvalue()
@@ -215,7 +215,7 @@ class TestSystemHandlerNormalWork(unittest.TestCase):
app = App(override_system_messages=True, app = App(override_system_messages=True,
print_func=print) print_func=print)
app.include_router(router) app.include_router(router)
app.start_polling() app.run_polling()
output = mock_stdout.getvalue() output = mock_stdout.getvalue()