diff --git a/README.md b/README.md index ce8ef3f..42af5cc 100644 --- a/README.md +++ b/README.md @@ -219,17 +219,6 @@ App(prompt: str = 'Enter a command', `RepeatedCommandInDifferentRoutersException`. Исключение вызывается только при наличии пересекающихся команд у __разных__ роутеров -```python -router = Router() - -@router.unknown_command -def unknown_command(command): - print(f'Command "{command}" undefined') -``` -При отсутствии обработчика неизвестных команд у главного роутера будет вызвано исключение -`MissingHandlerForUnknownCommandsException`. При регистрации обработчика неизвестных команд у -__не__ главного роутера будет вызвано исключение `HandlerForUnknownCommandsOnNonMainRouterException` - @@ -237,10 +226,7 @@ __не__ главного роутера будет вызвано иск - `InvalidRouterInstanceException` — Переданный объект в метод `App().include_router()` не является экземпляром класса `Router`. - `InvalidDescriptionMessagePatternException` — Неправильный формат паттерна описания команд. -- `OnlyOneMainRouterIsAllowedException` — Регистрация более одного главного роутера. -- `MissingMainRouterException` — Отсутствует главный роутер. -- `MissingHandlerForUnknownCommandsException` — В основном роутере отсутствует обработчик неизвестных команд. -- `HandlerForUnknownCommandsOnNonMainRouterException` — Обработчик неизвестных команд определён не у основного роутера. +- `IncorrectNumberOfHandlerArgsException` — У обработчика нестандартного поведения зарегистрировано неверное количество аргументов(в большинстве случаев у него должен быть один аргумент). - `NoRegisteredRoutersException` — Отсутствуют зарегистрированные роутеры. - `NoRegisteredHandlersException` — У роутера нет ни одного обработчика команд. - `RepeatedCommandInDifferentRoutersException` — Одна и та же команда зарегистрирована в разных роутерах. @@ -269,16 +255,11 @@ Router(title: str = 'Commands group title:', **`@`Router().**`command(command: Command)` -*param* `command: Command` **::** строковый триггер, который будет выполнять указанные действия -*example* **::** `U` / `update` / `ExaMPLE` +*param* `command: Command` **::** экземпляр класса `Command`, который определяет строковый триггер команды, +допустимые флаги команды и другое +*example* **::** `Command(command='ssh', description='connect via ssh')` -*method mean* **::** декоратор регистрирует функцию как обработчик команды - ---- - -**`@`Router().**`unknown_command` - -*method mean* **::** декоратор регистрирует функцию как обработчик неизвестных команд +*method mean* **::** декоратор, который регистрирует функцию как обработчик команды --- @@ -294,12 +275,6 @@ Router(title: str = 'Commands group title:', --- -**Router().**`get_router_info() -> dict` - -*method mean* **::** возвращает информацию о роутере - ---- - **Router().**`get_all_commands() -> list[str]` *method mean* **::** возвращает все зарегистрированные команды для данного роутера @@ -307,7 +282,9 @@ Router(title: str = 'Commands group title:', --- #### Исключения -- `InvalidCommandInstanceException` - Переданный объект для регистрации команды не является строкой - `InvalidDescriptionInstanceException` - Переданный объект для регистрации описания команды не является строкой -- `UnknownCommandHandlerHasAlreadyBeenCreatedException` - Обработчик неизвестных команд уже создан - `RepeatedCommandException` - Одна и та же команда зарегистрирована в одном роутере +- `RepeatedFlagNameException` - Повторяющиеся зарегистрированные флаги в команде +- `TooManyTransferredArgsException` - Слишком много зарегистрированных аргументов у обработчика команды +- `RequiredArgumentNotPassedException` - Не зарегистрирован обязательный аргумент у обработчика команды(аргумент, через который будут переданы флаги введённой команды) +- `IncorrectNumberOfHandlerArgsException` - У обработчика нестандартного поведения зарегистрировано неверное количество аргументов(в большинстве случаев у него должен быть один аргумент) \ No newline at end of file diff --git a/argenta/app/__init__.py b/argenta/app/__init__.py index f3d0744..145d061 100644 --- a/argenta/app/__init__.py +++ b/argenta/app/__init__.py @@ -1,3 +1 @@ from .entity import App -from .exceptions import (InvalidDescriptionMessagePatternException, - InvalidRouterInstanceException) diff --git a/argenta/router/entity.py b/argenta/router/entity.py index 1a8d081..4dc6e12 100644 --- a/argenta/router/entity.py +++ b/argenta/router/entity.py @@ -15,8 +15,8 @@ class Router: title: str = 'Commands group title:', name: str = 'subordinate'): - self.title = title - self.name = name + self._title = title + self._name = name self._command_entities: list[dict[str, Callable[[], None] | Command]] = [] self._ignore_command_register: bool = False @@ -106,11 +106,11 @@ class Router: def get_name(self) -> str: - return self.name + return self._name def get_title(self) -> str: - return self.title + return self._title def get_all_commands(self) -> list[str]: diff --git a/argenta/router/exceptions.py b/argenta/router/exceptions.py index f6e91e1..aa70784 100644 --- a/argenta/router/exceptions.py +++ b/argenta/router/exceptions.py @@ -23,11 +23,6 @@ class RequiredArgumentNotPassedException(Exception): return "Required argument not passed" -class NotValidInputFlagHandlerHasBeenAlreadyCreatedException(Exception): - def __str__(self): - return "Invalid Input Flag Handler has already been created" - - class IncorrectNumberOfHandlerArgsException(Exception): def __str__(self): - return "Incorrect Input Flags Handler has incorrect number of arguments" + return "Handler has incorrect number of arguments" diff --git a/tests/test_router.py b/tests/test_router.py index 671bffc..b7b288e 100644 --- a/tests/test_router.py +++ b/tests/test_router.py @@ -1,6 +1,7 @@ from argenta.command.params.flag import FlagsGroup, Flag from argenta.router import Router from argenta.command import Command +from argenta.router.exceptions import RepeatedCommandException import unittest @@ -32,3 +33,94 @@ class TestRouter(unittest.TestCase): input_command.set_input_flags(FlagsGroup([Flag('host')])) self.assertEqual(router.input_command_handler(input_command), None) + + def test_input_correct_command_with_one_register_and_ignore_command_register(self): + router = Router() + router.set_ignore_command_register(True) + @router.command(Command(command='test')) + def test(): + return 'correct result' + + self.assertEqual(router.input_command_handler(Command(command='test')), 'correct result') + + def test_input_correct_command_with_different_register_and_ignore_command_register(self): + router = Router() + router.set_ignore_command_register(True) + @router.command(Command(command='test')) + def test(): + return 'correct result' + + self.assertEqual(router.input_command_handler(Command(command='TeSt')), 'correct result') + + def test_input_incorrect_command_with_ignore_command_register(self): + router = Router() + router.set_ignore_command_register(True) + @router.command(Command(command='test')) + def test(): + return 'correct result' + + self.assertEqual(router.input_command_handler(Command(command='Test2')), None) + + def test_register_repeated_commands_with_one_register(self): + router = Router() + @router.command(Command(command='test')) + def test(): + return 'correct result' + + with self.assertRaises(RepeatedCommandException): + @router.command(Command(command='test')) + def test(): + return 'correct result' + + def test_register_commands_with_different_register(self): + router = Router() + @router.command(Command(command='test')) + def test(): + return 'correct result' + + try: + @router.command(Command(command='Test')) + def test(): + return 'correct result' + except RepeatedCommandException: + self.fail('RepeatedCommandException should not have been thrown') + + def test_register_repeated_commands_with_one_register_and_set_ignore_command_register(self): + router = Router() + router.set_ignore_command_register(True) + @router.command(Command(command='test')) + def test(): + return 'correct result' + + with self.assertRaises(RepeatedCommandException): + @router.command(Command(command='test')) + def test(): + return 'correct result' + + def test_register_repeated_commands_with_different_register_and_set_ignore_command_register(self): + router = Router() + router.set_ignore_command_register(True) + @router.command(Command(command='test')) + def test(): + return 'correct result' + + with self.assertRaises(RepeatedCommandException): + @router.command(Command(command='Test')) + def test(): + return 'correct result' + + + + + + + + + + + + + + + +