mirror of
https://github.com/koloideal/Argenta.git
synced 2026-06-10 18:15:28 +03:00
fix
This commit is contained in:
@@ -49,9 +49,12 @@ def handler():
|
|||||||
@router.command(Command(command="ssh",
|
@router.command(Command(command="ssh",
|
||||||
description='connect via ssh',
|
description='connect via ssh',
|
||||||
flags=FlagsGroup(list_of_flags)))
|
flags=FlagsGroup(list_of_flags)))
|
||||||
def handler_with_flags(args: FlagsGroup):
|
def handler_with_flags(flags: dict):
|
||||||
print(f'Command "{command}" undefined')
|
for flag in flags:
|
||||||
|
print(f'Flag name: {flag['name']}\n
|
||||||
|
f'Flag value: {flag['value']}')
|
||||||
```
|
```
|
||||||
|
|
||||||
```python
|
```python
|
||||||
#main.py
|
#main.py
|
||||||
from argenta.app import App
|
from argenta.app import App
|
||||||
@@ -88,7 +91,7 @@ App(prompt: str = 'Enter a command',
|
|||||||
farewell_message: str = '\nGoodBye\n',
|
farewell_message: str = '\nGoodBye\n',
|
||||||
exit_command: str = 'Q',
|
exit_command: str = 'Q',
|
||||||
exit_command_description: str = 'Exit command',
|
exit_command_description: str = 'Exit command',
|
||||||
exit_command_title: str = 'System points:',
|
system_points_title: str = 'System points:',
|
||||||
ignore_exit_command_register: bool = True,
|
ignore_exit_command_register: bool = True,
|
||||||
ignore_command_register: bool = False,
|
ignore_command_register: bool = False,
|
||||||
line_separate: str = '',
|
line_separate: str = '',
|
||||||
@@ -103,7 +106,7 @@ App(prompt: str = 'Enter a command',
|
|||||||
- `farewell_message` (`str`): Сообщение при выходе.
|
- `farewell_message` (`str`): Сообщение при выходе.
|
||||||
- `exit_command` (`str`): Команда выхода (по умолчанию `'Q'`).
|
- `exit_command` (`str`): Команда выхода (по умолчанию `'Q'`).
|
||||||
- `exit_command_description` (`str`): Описание команды выхода.
|
- `exit_command_description` (`str`): Описание команды выхода.
|
||||||
- `exit_command_title` (`str`): Заголовок перед списком команд выхода.
|
- `system_points_title` (`str`): Заголовок перед списком системных команд.
|
||||||
- `ignore_exit_command_register` (`bool`): Игнорировать регистр команды выхода.
|
- `ignore_exit_command_register` (`bool`): Игнорировать регистр команды выхода.
|
||||||
- `ignore_command_register` (`bool`): Игнорировать регистр всех команд.
|
- `ignore_command_register` (`bool`): Игнорировать регистр всех команд.
|
||||||
- `line_separate` (`str`): Разделительная строка между командами.
|
- `line_separate` (`str`): Разделительная строка между командами.
|
||||||
@@ -123,13 +126,10 @@ App(prompt: str = 'Enter a command',
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
**App().**`include_router(router: Router, is_main: bool = False) -> None`
|
**App().**`include_router(router: Router) -> None`
|
||||||
|
|
||||||
*param* `router: Router` **::** регистрируемый роутер
|
*param* `router: Router` **::** регистрируемый роутер
|
||||||
|
|
||||||
*param* `is_main: bool` **::** будет ли являться регистрируемый роутер главным
|
|
||||||
*example* **::** `True` или `False`
|
|
||||||
|
|
||||||
*method mean* **::** регистрирует роутер в приложении
|
*method mean* **::** регистрирует роутер в приложении
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -137,7 +137,7 @@ App(prompt: str = 'Enter a command',
|
|||||||
**App().**`set_initial_message(message: str) -> None`
|
**App().**`set_initial_message(message: str) -> None`
|
||||||
|
|
||||||
*param* `message: str` **::** устанавливаемое приветственное сообщение
|
*param* `message: str` **::** устанавливаемое приветственное сообщение
|
||||||
*example* **::** `"Hello, I'm a cli example app"`
|
*example* **::** `"Hello, I'm a example app"`
|
||||||
|
|
||||||
*method mean* **::** устанавливает сообщение, которое будет отображено при запуске программы
|
*method mean* **::** устанавливает сообщение, которое будет отображено при запуске программы
|
||||||
|
|
||||||
@@ -157,31 +157,57 @@ App(prompt: str = 'Enter a command',
|
|||||||
*param* `pattern: str` **::** паттерн описания команды при её выводе в консоль
|
*param* `pattern: str` **::** паттерн описания команды при её выводе в консоль
|
||||||
*example* **::** `"[{command}] *=*=* {description}"`
|
*example* **::** `"[{command}] *=*=* {description}"`
|
||||||
|
|
||||||
*method mean* **::** устанавливает приветственное сообщение
|
*method mean* **::** устанавливает паттерн описания команд, который будет использован
|
||||||
|
при выводе в консоль
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
**App().**`get_main_router() -> Router`
|
**App().**`set_repeated_input_flags_handler(handler: Callable[[str], None]) -> None`
|
||||||
|
|
||||||
*method mean* **::** возвращает `Router()`, который является главным в приложении
|
*param* `handler: Callable[[str], None]` **::** функция или лямбда функция, которой будет передано управление при
|
||||||
|
вводе юзером повторяющихся флагов
|
||||||
|
*example* **::** `lambda raw_command: print_func(f'Repeated input flags: "{raw_command}"')`
|
||||||
|
|
||||||
|
*method mean* **::** устанавливает функцию, которой будет передано управление при
|
||||||
|
вводе юзером повторяющихся флагов
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
**App().**`get_all_app_commands() -> list[str]`
|
**App().**`set_invalid_input_flags_handler(self, handler: Callable[[str], None]) -> None`
|
||||||
|
|
||||||
*method mean* **::** возвращает список команд всех зарегистрированных роутеров, сохраняя их регистр
|
*param* `handler: Callable[[str], None]` **::** функция или лямбда функция, которой будет передано управление при
|
||||||
|
вводе юзером команды с некорректным синтаксисом флагов
|
||||||
|
*example* **::** `lambda raw_command: print_func(f'Incorrect flag syntax: "{raw_command}"')`
|
||||||
|
|
||||||
|
*method mean* **::** устанавливает функцию, которой будет передано управление при
|
||||||
|
вводе юзером команды с некорректным синтаксисом флагов
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**App().**`set_unknown_command_handler(self, handler: Callable[[str], None]) -> None`
|
||||||
|
|
||||||
|
*param* `handler: Callable[[str], None]` **::** функция или лямбда функция, которой будет передано управление при
|
||||||
|
вводе юзером неизвестной команды
|
||||||
|
*example* **::** `lambda command: print_func(f"Unknown command: {command.get_string_entity()}")`
|
||||||
|
|
||||||
|
*method mean* **::** устанавливает функцию, которой будет передано управление при
|
||||||
|
вводе юзером неизвестной команды
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**App().**`set_empty_command_handler(self, handler: Callable[[str], None]) -> None`
|
||||||
|
|
||||||
|
*param* `handler: Callable[[str], None]` **::** функция или лямбда функция, которой будет передано управление при
|
||||||
|
вводе юзером пустой команды
|
||||||
|
*example* **::** `lambda: print_func(f'Empty input command')`
|
||||||
|
|
||||||
|
*method mean* **::** устанавливает функцию, которой будет передано управление при
|
||||||
|
вводе юзером пустой команды
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
#### Примечания
|
#### Примечания
|
||||||
|
|
||||||
- Среди зарегистрированных в приложении роутеров должен быть один главный, является ли роутер главным
|
|
||||||
определяется значением аргумента `is_main` равным `True`, в методе `App().include_router()`, который по умолчанию равен
|
|
||||||
`False`, если в приложении зарегистрирован лишь один роутер, то он неявно устанавливается главным, если
|
|
||||||
зарегистрировано больше одного роутера, то требуется явное указание главного. При регистрации более одного
|
|
||||||
главного роутера вызывается исключение `OnlyOneMainRouterIsAllowedException`. При регистрации более одного
|
|
||||||
роутера и отсутствии указания главного вызывается исключение `MissingMainRouterException`
|
|
||||||
|
|
||||||
- В устанавливаемом паттерне сообщения описания команды необходимы быть два ключевых слова:
|
- В устанавливаемом паттерне сообщения описания команды необходимы быть два ключевых слова:
|
||||||
`command` и `description`, каждое из которых должно быть заключено в фигурные скобки, после обработки
|
`command` и `description`, каждое из которых должно быть заключено в фигурные скобки, после обработки
|
||||||
паттерна на места этих ключевых слов будут подставлены соответствующие значения команды, при отсутствии
|
паттерна на места этих ключевых слов будут подставлены соответствующие значения команды, при отсутствии
|
||||||
@@ -193,7 +219,6 @@ App(prompt: str = 'Enter a command',
|
|||||||
`RepeatedCommandInDifferentRoutersException`. Исключение вызывается только при наличии пересекающихся команд
|
`RepeatedCommandInDifferentRoutersException`. Исключение вызывается только при наличии пересекающихся команд
|
||||||
у __<u>разных</u>__ роутеров
|
у __<u>разных</u>__ роутеров
|
||||||
|
|
||||||
- У главного обработчика должен быть зарегистрирован обработчик неизвестных команд:
|
|
||||||
```python
|
```python
|
||||||
router = Router()
|
router = Router()
|
||||||
|
|
||||||
@@ -213,7 +238,7 @@ __<u>не</u>__ главного роутера будет вызвано иск
|
|||||||
- `InvalidRouterInstanceException` — Переданный объект в метод `App().include_router()` не является экземпляром класса `Router`.
|
- `InvalidRouterInstanceException` — Переданный объект в метод `App().include_router()` не является экземпляром класса `Router`.
|
||||||
- `InvalidDescriptionMessagePatternException` — Неправильный формат паттерна описания команд.
|
- `InvalidDescriptionMessagePatternException` — Неправильный формат паттерна описания команд.
|
||||||
- `OnlyOneMainRouterIsAllowedException` — Регистрация более одного главного роутера.
|
- `OnlyOneMainRouterIsAllowedException` — Регистрация более одного главного роутера.
|
||||||
- `MissingMainRouterException` — Отсутствует главный роутер.
|
- `MissingMainRouterException` — Отсутствует главный роутер.
|
||||||
- `MissingHandlerForUnknownCommandsException` — В основном роутере отсутствует обработчик неизвестных команд.
|
- `MissingHandlerForUnknownCommandsException` — В основном роутере отсутствует обработчик неизвестных команд.
|
||||||
- `HandlerForUnknownCommandsOnNonMainRouterException` — Обработчик неизвестных команд определён не у основного роутера.
|
- `HandlerForUnknownCommandsOnNonMainRouterException` — Обработчик неизвестных команд определён не у основного роутера.
|
||||||
- `NoRegisteredRoutersException` — Отсутствуют зарегистрированные роутеры.
|
- `NoRegisteredRoutersException` — Отсутствуют зарегистрированные роутеры.
|
||||||
@@ -242,14 +267,11 @@ Router(title: str = 'Commands group title:',
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
**`@`Router().**`command(command: str, description: str = None)`
|
**`@`Router().**`command(command: Command)`
|
||||||
|
|
||||||
*param* `command: str` **::** строковый триггер, который будет выполнять указанные действия
|
*param* `command: Command` **::** строковый триггер, который будет выполнять указанные действия
|
||||||
*example* **::** `U` / `update` / `ExaMPLE`
|
*example* **::** `U` / `update` / `ExaMPLE`
|
||||||
|
|
||||||
*param* `description: str` **::** описание команды, которое будет выведено в консоль
|
|
||||||
*example* **::** `description for update command` или `example description`
|
|
||||||
|
|
||||||
*method mean* **::** декоратор регистрирует функцию как обработчик команды
|
*method mean* **::** декоратор регистрирует функцию как обработчик команды
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
+11
-3
@@ -23,7 +23,7 @@ class App:
|
|||||||
invalid_input_flags_message: str = 'Invalid input flags',
|
invalid_input_flags_message: str = 'Invalid input flags',
|
||||||
exit_command: str = 'Q',
|
exit_command: str = 'Q',
|
||||||
exit_command_description: str = 'Exit command',
|
exit_command_description: str = 'Exit command',
|
||||||
exit_command_title: str = 'System points:',
|
system_points_title: str = 'System points:',
|
||||||
ignore_exit_command_register: bool = True,
|
ignore_exit_command_register: bool = True,
|
||||||
ignore_command_register: bool = False,
|
ignore_command_register: bool = False,
|
||||||
line_separate: str = '',
|
line_separate: str = '',
|
||||||
@@ -34,7 +34,7 @@ class App:
|
|||||||
self.print_func = print_func
|
self.print_func = print_func
|
||||||
self.exit_command = exit_command
|
self.exit_command = exit_command
|
||||||
self.exit_command_description = exit_command_description
|
self.exit_command_description = exit_command_description
|
||||||
self.exit_command_title = exit_command_title
|
self.system_points_title = system_points_title
|
||||||
self.ignore_exit_command_register = ignore_exit_command_register
|
self.ignore_exit_command_register = ignore_exit_command_register
|
||||||
self.farewell_message = farewell_message
|
self.farewell_message = farewell_message
|
||||||
self.initial_message = initial_message
|
self.initial_message = initial_message
|
||||||
@@ -163,6 +163,14 @@ class App:
|
|||||||
self._unknown_command_handler = handler
|
self._unknown_command_handler = handler
|
||||||
|
|
||||||
|
|
||||||
|
def set_empty_command_handler(self, handler: Callable[[str], None]) -> None:
|
||||||
|
args = getfullargspec(handler).args
|
||||||
|
if len(args) != 1:
|
||||||
|
raise IncorrectNumberOfHandlerArgsException()
|
||||||
|
else:
|
||||||
|
self._empty_input_command_handler = handler
|
||||||
|
|
||||||
|
|
||||||
def include_router(self, router: Router) -> None:
|
def include_router(self, router: Router) -> None:
|
||||||
if not isinstance(router, Router):
|
if not isinstance(router, Router):
|
||||||
raise InvalidRouterInstanceException()
|
raise InvalidRouterInstanceException()
|
||||||
@@ -240,7 +248,7 @@ class App:
|
|||||||
)
|
)
|
||||||
self.print_func(self.command_group_description_separate)
|
self.print_func(self.command_group_description_separate)
|
||||||
|
|
||||||
self.print_func(self.exit_command_title)
|
self.print_func(self.system_points_title)
|
||||||
self.print_func(self._description_message_pattern.format(
|
self.print_func(self._description_message_pattern.format(
|
||||||
command=self.exit_command,
|
command=self.exit_command,
|
||||||
description=self.exit_command_description
|
description=self.exit_command_description
|
||||||
|
|||||||
@@ -93,9 +93,8 @@ class Command(Generic[T]):
|
|||||||
current_flag_value = _
|
current_flag_value = _
|
||||||
if current_flag_name and current_flag_value:
|
if current_flag_name and current_flag_value:
|
||||||
flag_prefix_last_symbol_index = current_flag_name.rfind('-')
|
flag_prefix_last_symbol_index = current_flag_name.rfind('-')
|
||||||
flag_prefix = current_flag_name[:flag_prefix_last_symbol_index]
|
flag_prefix = current_flag_name[:flag_prefix_last_symbol_index+1]
|
||||||
flag_name = current_flag_name[flag_prefix_last_symbol_index:]
|
flag_name = current_flag_name[flag_prefix_last_symbol_index+1:]
|
||||||
|
|
||||||
input_flag = Flag(flag_name=flag_name,
|
input_flag = Flag(flag_name=flag_name,
|
||||||
flag_prefix=flag_prefix)
|
flag_prefix=flag_prefix)
|
||||||
input_flag.set_value(current_flag_value)
|
input_flag.set_value(current_flag_value)
|
||||||
|
|||||||
@@ -49,7 +49,6 @@ class Router:
|
|||||||
def input_command_handler(self, input_command: Command):
|
def input_command_handler(self, input_command: Command):
|
||||||
input_command_name: str = input_command.get_string_entity()
|
input_command_name: str = input_command.get_string_entity()
|
||||||
input_command_flags: FlagsGroup = input_command.get_input_flags()
|
input_command_flags: FlagsGroup = input_command.get_input_flags()
|
||||||
input_command_flags_dict: dict = input_command_flags.unparse_to_dict()
|
|
||||||
for command_entity in self._command_entities:
|
for command_entity in self._command_entities:
|
||||||
if input_command_name.lower() == command_entity['command'].get_string_entity().lower():
|
if input_command_name.lower() == command_entity['command'].get_string_entity().lower():
|
||||||
if command_entity['command'].get_registered_flags():
|
if command_entity['command'].get_registered_flags():
|
||||||
@@ -59,7 +58,7 @@ class Router:
|
|||||||
if not is_valid:
|
if not is_valid:
|
||||||
self._not_valid_flag_handler(flag)
|
self._not_valid_flag_handler(flag)
|
||||||
return
|
return
|
||||||
return command_entity['handler_func'](input_command_flags_dict)
|
return command_entity['handler_func'](input_command_flags.unparse_to_dict())
|
||||||
else:
|
else:
|
||||||
return command_entity['handler_func']({})
|
return command_entity['handler_func']({})
|
||||||
else:
|
else:
|
||||||
|
|||||||
Reference in New Issue
Block a user