diff --git a/README.md b/README.md index 8900581..db7e4b9 100644 --- a/README.md +++ b/README.md @@ -305,6 +305,7 @@ Router(title: str = 'Commands group title:', - `TooManyTransferredArgsException` - Слишком много зарегистрированных аргументов у обработчика команды - `RequiredArgumentNotPassedException` - Не зарегистрирован обязательный аргумент у обработчика команды(аргумент, через который будут переданы флаги введённой команды) - `IncorrectNumberOfHandlerArgsException` - У обработчика нестандартного поведения зарегистрировано неверное количество аргументов(в большинстве случаев у него должен быть один аргумент) +- `TriggerCannotContainSpacesException` - У регистрируемой команды в триггере содержатся пробелы --- @@ -363,9 +364,9 @@ Command(trigger: str, ### Конструктор ```python Flag(flag_name: str, - flag_prefix: Literal['-', '--', '---'] = '-', + flag_prefix: typing.Literal['-', '--', '---'] = '-', ignore_flag_value_register: bool = False, - possible_flag_values: list[str] | Pattern[str] = False) + possible_flag_values: list[str] | typing.Pattern[str] = False) ``` --- diff --git a/argenta/router/entity.py b/argenta/router/entity.py index ab5a6eb..2c6f5e5 100644 --- a/argenta/router/entity.py +++ b/argenta/router/entity.py @@ -8,7 +8,8 @@ from ..router.exceptions import (RepeatedCommandException, RepeatedFlagNameException, TooManyTransferredArgsException, RequiredArgumentNotPassedException, - IncorrectNumberOfHandlerArgsException) + IncorrectNumberOfHandlerArgsException, + TriggerCannotContainSpacesException) class Router: @@ -71,6 +72,8 @@ class Router: def _validate_command(self, command: Command): command_name: str = command.get_trigger() + if command_name.find(' ') != -1: + raise TriggerCannotContainSpacesException() if command_name in self.get_all_commands(): raise RepeatedCommandException() if self._ignore_command_register: diff --git a/argenta/router/exceptions.py b/argenta/router/exceptions.py index cee3298..bdbdd2c 100644 --- a/argenta/router/exceptions.py +++ b/argenta/router/exceptions.py @@ -21,3 +21,8 @@ class RequiredArgumentNotPassedException(Exception): class IncorrectNumberOfHandlerArgsException(Exception): def __str__(self): return "Handler has incorrect number of arguments" + + +class TriggerCannotContainSpacesException(Exception): + def __str__(self): + return "Command trigger cannot contain spaces" diff --git a/mock/mock_app/handlers/routers.py b/mock/mock_app/handlers/routers.py index 6e4ed12..1e16896 100644 --- a/mock/mock_app/handlers/routers.py +++ b/mock/mock_app/handlers/routers.py @@ -32,7 +32,7 @@ def command_help(): help_command() -@work_router.command(Command(trigger='P', description='Start Solving', flags=flags)) +@work_router.command(Command(trigger='--gbP', description='Start Solving', flags=flags)) def command_start_solving(args: dict): print('Solving...') pprint(args) diff --git a/tests/test_router.py b/tests/test_router.py index a4780b2..c3fdb3f 100644 --- a/tests/test_router.py +++ b/tests/test_router.py @@ -1,7 +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 +from argenta.router.exceptions import RepeatedCommandException, TriggerCannotContainSpacesException import unittest @@ -109,6 +109,13 @@ class TestRouter(unittest.TestCase): def test(): return 'correct result' + def test_register_command_with_spaces_in_trigger(self): + router = Router() + with self.assertRaises(TriggerCannotContainSpacesException): + @router.command(Command(trigger='command with spaces')) + def test(): + return 'correct result' +