From 0ae86d0b2b22997115c535a1e61b308e0c4245f8 Mon Sep 17 00:00:00 2001 From: kolo Date: Sat, 15 Feb 2025 12:05:42 +0300 Subject: [PATCH] work on v0.3.0 --- argenta/app/entity.py | 32 ++++++++++----- .../__pycache__/__init__.cpython-313.pyc | Bin 0 -> 163 bytes .../__pycache__/entity.cpython-313.pyc | Bin 0 -> 2271 bytes .../__pycache__/exceptions.cpython-313.pyc | Bin 0 -> 1278 bytes argenta/command/entity.py | 7 +++- .../__pycache__/__init__.cpython-313.pyc | Bin 0 -> 170 bytes .../flag/__pycache__/__init__.cpython-313.pyc | Bin 0 -> 175 bytes .../flag/__pycache__/entity.cpython-313.pyc | Bin 0 -> 1850 bytes argenta/command/params/flag/entity.py | 14 ++++--- .../__pycache__/__init__.cpython-313.pyc | Bin 0 -> 182 bytes .../__pycache__/entity.cpython-313.pyc | Bin 0 -> 554 bytes argenta/command/params/flags_group/entity.py | 5 ++- .../parse_input_command}/__init__.py | 0 .../__pycache__/__init__.cpython-313.pyc | Bin 0 -> 183 bytes .../__pycache__/entity.cpython-313.pyc | Bin 0 -> 1116 bytes argenta/command/parse_input_command/entity.py | 38 ++++++++++++++++++ .../command/parse_input_command/exceptions.py | 3 ++ argenta/input_command/entity.py | 3 -- argenta/router/entity.py | 23 ++++++----- tests/mock_app/handlers/routers.py | 8 ++-- tests/mock_app/main.py | 4 +- 21 files changed, 101 insertions(+), 36 deletions(-) create mode 100644 argenta/command/__pycache__/__init__.cpython-313.pyc create mode 100644 argenta/command/__pycache__/entity.cpython-313.pyc create mode 100644 argenta/command/__pycache__/exceptions.cpython-313.pyc create mode 100644 argenta/command/params/__pycache__/__init__.cpython-313.pyc create mode 100644 argenta/command/params/flag/__pycache__/__init__.cpython-313.pyc create mode 100644 argenta/command/params/flag/__pycache__/entity.cpython-313.pyc create mode 100644 argenta/command/params/flags_group/__pycache__/__init__.cpython-313.pyc create mode 100644 argenta/command/params/flags_group/__pycache__/entity.cpython-313.pyc rename argenta/{input_command => command/parse_input_command}/__init__.py (100%) create mode 100644 argenta/command/parse_input_command/__pycache__/__init__.cpython-313.pyc create mode 100644 argenta/command/parse_input_command/__pycache__/entity.cpython-313.pyc create mode 100644 argenta/command/parse_input_command/entity.py create mode 100644 argenta/command/parse_input_command/exceptions.py delete mode 100644 argenta/input_command/entity.py diff --git a/argenta/app/entity.py b/argenta/app/entity.py index 28992c3..6e42047 100644 --- a/argenta/app/entity.py +++ b/argenta/app/entity.py @@ -1,5 +1,8 @@ from typing import Callable +from ..command.entity import Command +from argenta.command.parse_input_command.entity import ParseInputCommand from ..router.entity import Router +from ..command.parse_input_command.exceptions import InvalidInputFlagsException from .exceptions import (InvalidRouterInstanceException, InvalidDescriptionMessagePatternException, OnlyOneMainRouterIsAllowedException, @@ -16,6 +19,7 @@ class App: prompt: str = 'Enter a command', initial_message: str = '\nHello, I am Argenta\n', farewell_message: str = '\nGoodBye\n', + invalid_input_flags_message: str = 'Invalid input flags', exit_command: str = 'Q', exit_command_description: str = 'Exit command', exit_command_title: str = 'System points:', @@ -33,13 +37,14 @@ class App: self.ignore_exit_command_register = ignore_exit_command_register self.farewell_message = farewell_message self.initial_message = initial_message + self.invalid_input_flags_message = invalid_input_flags_message self.line_separate = line_separate self.command_group_description_separate = command_group_description_separate self.ignore_command_register = ignore_command_register self.repeat_command_groups = repeat_command_groups self._routers: list[Router] = [] - self._registered_router_entities: list[dict[str, str | list[dict[str, Callable[[], None] | str]] | Router]] = [] + self._registered_router_entities: list[dict[str, str | list[dict[str, Callable[[], None] | Command]] | Router]] = [] self._app_main_router: Router | None = None self._description_message_pattern: str = '[{command}] *=*=* {description}' @@ -61,12 +66,21 @@ class App: self._print_command_group_description() self.print_func(self.prompt) - command: str = input() + raw_command: str = input() + try: + command: Command = ParseInputCommand(raw_command=raw_command) + except InvalidInputFlagsException: + self.print_func(self.line_separate) + self.print_func(self.command_group_description_separate) + if not self.repeat_command_groups: + self.print_func(self.prompt) + continue - self._checking_command_for_exit_command(command) + + self._checking_command_for_exit_command(command.get_string_entity()) self.print_func(self.line_separate) - is_unknown_command: bool = self._check_is_command_unknown(command) + is_unknown_command: bool = self._check_is_command_unknown(command.get_string_entity()) if is_unknown_command: if not self.repeat_command_groups: self.print_func(self.prompt) @@ -124,7 +138,7 @@ class App: router.set_ignore_command_register(self.ignore_command_register) self._routers.append(router) - command_entities: list[dict[str, Callable[[], None] | str]] = router.get_command_entities() + command_entities: list[dict[str, Callable[[], None] | Command]] = router.get_command_entities() self._registered_router_entities.append({'name': router.get_name(), 'title': router.get_title(), 'entity': router, @@ -187,10 +201,10 @@ class App: def _check_is_command_unknown(self, command: str): - registered_router_entities: list[dict[str, str | list[dict[str, Callable[[], None] | str]] | Router]] = self._registered_router_entities + registered_router_entities: list[dict[str, str | list[dict[str, Callable[[], None] | Command]] | Router]] = self._registered_router_entities for router_entity in registered_router_entities: for command_entity in router_entity['commands']: - if command_entity['command'].lower() == command.lower(): + if command_entity['command'].get_string_entity().lower() == command.lower(): if self.ignore_command_register: return False else: @@ -207,8 +221,8 @@ class App: self.print_func(router_entity['title']) for command_entity in router_entity['commands']: self.print_func(self._description_message_pattern.format( - command=command_entity['command'], - description=command_entity['description'] + command=command_entity['command'].get_string_entity(), + description=command_entity['command'].get_description() ) ) self.print_func(self.command_group_description_separate) diff --git a/argenta/command/__pycache__/__init__.cpython-313.pyc b/argenta/command/__pycache__/__init__.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..26ac58cfc09972a66498ce07e87ed2eab3061f87 GIT binary patch literal 163 zcmey&%ge<81TKo}(n0iN5CH>>P{wB#AY&>+I)f&o-%5reCLr%KNa~i8vsFxJacWU< zOm==wer8NSWl2VUUVK1NepYI7NpXy0QF>}#Nn%VQlupji%}vZpiHVQT%*!l^kJl@x hyv1RYo1apelWJGQ3N#XAWig2Hk(rT^v4|PS0ssUdDRBS* literal 0 HcmV?d00001 diff --git a/argenta/command/__pycache__/entity.cpython-313.pyc b/argenta/command/__pycache__/entity.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b4af6865183e4dab60b4470110717234c3012e4c GIT binary patch literal 2271 zcmb7FOHUhD6u#r}_zecT5M#iZP^aKF=Ai^pRaHe5N`;Xe)DaRAmZnpCa0l!$y)#q= z6p2;UNUho~P?J@&=mMmuO;*Vd=nt@!O14HsLh33z0*bQjId{h3U|96X{_eT2^S)mbNaVRNh{p0l*@`< zn9~hY(evtO-{sYHQ>*CKyUu|b)yPwgt+gK-bPh4mZQFU<92OJWJ*$!KZ3 z&+fYj@Gzb!C2%!VOK$P@(9AA&kDZNU^T82BBpm3YUyA02YFJScG3=AiY=ktGr*{lb_91DZC~+9QQjaEU(PTB0Y>(3a%pWSInCjN-`O$1vx>k3q!EA{gKFikjz3r+m-fjmL zH_O&6ShP!)(Jn?8=VTerGio-n(@a7^EkjeV>Ehdyj&zlKOAmH{b9A{L1se1+zEDP! z&Uj8D`hAX;JDUq_mR|*lt$ts08;hUO`P+&IZexitQn{k@<^ongGc>1Vv+}cecxe>A zD#R{HxJW2VEGB?rWGM!)EzdFb6;MpI*}n{VU7^@{Bcr9dZ!vyPy0$ z{UH4)S`Vjd;q*ad;&Jk6`bqkEWV#xfJ_z>wQmFS1*LsKHL@-?o!imY}k*R8EitYWj z_Uqaox9Y)>T5#l1=CS#7`^om-nfi@8wHtR1B4gFi*bz_C3mhvliUCWxvRP>L(Dihs ztU}id$a1+-*eD?%lI3qUl#;U(mgNMQ+=s6Sz?(onH-1b2n1KHP#g^i^ literal 0 HcmV?d00001 diff --git a/argenta/command/__pycache__/exceptions.cpython-313.pyc b/argenta/command/__pycache__/exceptions.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..83cd0eae08f10e923fc9a1a931b80aac855c5fa2 GIT binary patch literal 1278 zcmbVL&u`N(6ta^+F(ZhV4#_6DR(I z-X~7vfS@p9f!4h7tM>A9l5Br#e*5 z3~i%(C`3Cb#1VSznjFVE>ZqvOh&npzsc5SabPEe)9ktC+gg6cncS6kF zP+@W}ba^ZF{8o8)$WG%t8}ApBNzBGWCS=SK`r>^;Ph?iG9{`nDJOBkBx~x29W+=tJ zGy1Sy!}M#Mz6F}2IW9dx^J4*p{qkV{N%T@sE~2+ZUS!eHnS5O^a>R=_G?5~D&Qr={ z9L4pXn8qS%I}*XkS=k{(NKQz(yQ2S~KIo{+1rYxcecSXat)|wJo|14!-!{2jCCRhZo8>*Zu-z%p;co literal 0 HcmV?d00001 diff --git a/argenta/command/entity.py b/argenta/command/entity.py index fa7fd8b..61b8fb6 100644 --- a/argenta/command/entity.py +++ b/argenta/command/entity.py @@ -26,11 +26,14 @@ class Command: def get_flags(self): return self._flags + def set_command(self, command: str): + self._command = command + def validate_commands_params(self): if not isinstance(self._command, str): raise InvalidCommandInstanceException(self._command) - if isinstance(self._description, str): + if not isinstance(self._description, str): raise InvalidDescriptionInstanceException() - if isinstance(self._flags, Flag) or isinstance(self._flags, FlagsGroup): + if not (isinstance(self._flags, Flag) or isinstance(self._flags, FlagsGroup)): raise InvalidFlagsInstanceException diff --git a/argenta/command/params/__pycache__/__init__.cpython-313.pyc b/argenta/command/params/__pycache__/__init__.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f90c4e8ddcc5ea85e034f289deb8a52b11afdb12 GIT binary patch literal 170 zcmey&%ge<81YDZy(n0iN5CH>>P{wB#AY&>+I)f&o-%5reCLr%KNa~iSvsFxJacWU< zOm==wer8NSWl2VUUVK1NepYI7NpXy0QF>}#Nn%VQlupji%}vZpi77}dO3W>eiI30B o%PfhH*DI*J#bJ}1pHiBWYFESxG#O-bF^KVznURsPh#ANN08HsDCIA2c literal 0 HcmV?d00001 diff --git a/argenta/command/params/flag/__pycache__/__init__.cpython-313.pyc b/argenta/command/params/flag/__pycache__/__init__.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..65a5e012f444bb411b1b143b4d622d6e8a9ca973 GIT binary patch literal 175 zcmey&%ge<81d^KT(n0iN5CH>>P{wB#AY&>+I)f&o-%5reCLr%KNa~iKvsFxJacWU< zOm==wer8NSWl2VUUVK1NepYI7NpXy0QF>}#Nn%VQlupji%}vZpi77}dO3W>eNy|x0 tkBN`Z%*!l^kJl@xyv1RYo1apelWJGQ3N#*MeKCmfk(rT^v4|PS0svoBE-(N9 literal 0 HcmV?d00001 diff --git a/argenta/command/params/flag/__pycache__/entity.cpython-313.pyc b/argenta/command/params/flag/__pycache__/entity.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..44ef5fe6d223affc82ea1140dc80989d3986e018 GIT binary patch literal 1850 zcmb6ZO>Y}T^zE0uiQ_obNij|v?0j|$P8x8b6k4UEL{UhhkR`~64Xcf_SvG8T&CCXx zo_az(aLpZVR6>GYXpis@YEtB7C8S84dO;=;s<`oHZ6{7?K|HVDysw#g^S%y~$xcA{ z=MOlq!VN=}X zh^)$4ARTIlCKh?MlSxUZnji_QOX&{98ON|5G4I2U4J38f*fPUJL{^BoVc$@MkSpBe z3x%6Pp->33w&i-n)FX>e4QJcbiD}sspAhy|JWA~~r(H|S%)1t_00{U$EF#*4QjgQp zKq=>NEv7W(G(!bYy5O)K5m<1CTU106M~=u0B^YACQlwC%rnAweW8%nwG8b|T!ujdT z+6pxZ)jswd&(@Z9{Es|WUn1V7S@x-Rjaa7Z8=BEv%ih+O;jU{HgBV*>W3SfG!1i~> zD?6dA>$YqAx*jHHP&3|Q*?qJh(JiRUkRAG>JLn&MC})DLq6!0i5?6OdDyw6Oc@T8k@N$L~Zwe&{xD04iQBPphO&N6-dggQJO#q%F>b`qUO zbPIw+s+Ks9UyvWEH-XowwqP+ zZ{J=BQfE*{PBABXY`3!Qx7BsIJ+?74iE{Hh691VS{aLv=%H9>U;FjB41J7m9%E{BS zpN0>3%1;30XVGbI@ZU~Y;um@W5|Be{mwyw_Hn7?(&f-fwPphnU3yY(CW8VfS!s7cg zig4U&1dl~&lva{KI^=Fp794D_MnYe}!Cw6d3e>4#!%TKj2Q+nZRePHXp#d-1#R?>msJPOR>wSA+f+_xp4E zxM6InIySYJo@z;+|LdR+E_}#QmeL;~bM2MbiHUMFH5T!S9cVK%qja%OXOj^-y;Ik> zy!CAya(dXM>z`~JPE(W8^$nX)-?3fO^-wKfO%oQFP+apoClno=lcWa)(l zFfj69^tI~1>ve&#`-RE6#0czzb1#2A{ngH&amF5;lBBcs?xd8tKlB)IY23yx!e@su xf2V@I8u{M1eT2Ed`lOLy`K?9_u97j7u^~p8vMz8O_bX%{#|F5}0U(O@{0)+MhRy&0 literal 0 HcmV?d00001 diff --git a/argenta/command/params/flag/entity.py b/argenta/command/params/flag/entity.py index ca45eca..c772a4d 100644 --- a/argenta/command/params/flag/entity.py +++ b/argenta/command/params/flag/entity.py @@ -11,6 +11,8 @@ class Flag: self.possible_flag_values = possible_flag_values self.ignore_flag_value_register = ignore_flag_value_register + self._value = None + def get_string_entity(self): if self.ignore_flag_value_register: string_entity: str = self.flag_prefix + self.flag_name.lower() @@ -18,6 +20,12 @@ class Flag: string_entity: str = self.flag_prefix + self.flag_name return string_entity + def get_value(self): + return self._value + + def set_value(self, value): + self._value = value + def validate_input_flag_value(self, input_flag_value: str): if self.possible_flag_values: if self.ignore_flag_value_register: @@ -32,9 +40,3 @@ class Flag: return False else: return True - - - - -c = Flag('s', flag_prefix='---kinn', ignore_flag_value_register=False, possible_flag_values=['abc', 'ASW', 'eBc']) -print(c.get_string_entity()) diff --git a/argenta/command/params/flags_group/__pycache__/__init__.cpython-313.pyc b/argenta/command/params/flags_group/__pycache__/__init__.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e0f1d5f9b68012f3259834b93aa1369266200110 GIT binary patch literal 182 zcmey&%ge<81VNhX(n0iN5CH>>P{wB#AY&>+I)f&o-%5reCLr%KNa|LovsFxJacWU< zOm==wer8NSWl2VUUVK1NepYI7NpXy0QF>}#Nn%VQlupji%}vZpi77}dO3W>eNy|x0 zFOE+y$}cU5iI30B%PfhH*DI*J#bJ}1pHiBWYFESxv<2jfVi4maGb1Bo5i^hl02V|s AZvX%Q literal 0 HcmV?d00001 diff --git a/argenta/command/params/flags_group/__pycache__/entity.cpython-313.pyc b/argenta/command/params/flags_group/__pycache__/entity.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f51981b4d61ad6efad6589f8cf0602c907e49ae8 GIT binary patch literal 554 zcmYLGJxc>Y5S_hCG=_+x2q9_2?kv*ThzKHR7Xyc2u`sOX_F1ALeNOpw^1-g4E?N~}?%G{$ zTA0JtW>Q@?d}%->7l&TA!&J^CwVMKGjp3~IHLS6 z42+g16or{lQq?iY(^O?Qa-vA3T2_TI;?AVai_L5>nH4R>IExKpvHjoqV0p!}Gf;tNoR>#s5JoGRccRy{nywizraFe_yu-hgFyfQ literal 0 HcmV?d00001 diff --git a/argenta/command/params/flags_group/entity.py b/argenta/command/params/flags_group/entity.py index e8c798d..14e5150 100644 --- a/argenta/command/params/flags_group/entity.py +++ b/argenta/command/params/flags_group/entity.py @@ -1,3 +1,6 @@ +from argenta.command.params.flag.entity import Flag + + class FlagsGroup: - def __init__(self, flags): + def __init__(self, flags: list[Flag]): self.flags = flags diff --git a/argenta/input_command/__init__.py b/argenta/command/parse_input_command/__init__.py similarity index 100% rename from argenta/input_command/__init__.py rename to argenta/command/parse_input_command/__init__.py diff --git a/argenta/command/parse_input_command/__pycache__/__init__.cpython-313.pyc b/argenta/command/parse_input_command/__pycache__/__init__.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e4c8bb617104f461d9bd057ce00323e5dbc05472 GIT binary patch literal 183 zcmey&%ge<81UDSkr-SInAOZ#$p^VQgK*m&tbOudEzm*I{OhDdekkqX(XRDad;?$zz znC$$V{LGku%94!yy!e2k{H)aElHwT0qV&|flEj!qD4m?2o12)I5>t>^RGb>0nO9I+ u5)TuL2l6vZ;^XxSDsOSv!3DIincF_{hx2$XLV-WB~xa*D`$o literal 0 HcmV?d00001 diff --git a/argenta/command/parse_input_command/__pycache__/entity.cpython-313.pyc b/argenta/command/parse_input_command/__pycache__/entity.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0ae991dbe1bc3ed5bbc5e024b876d789f53cdda6 GIT binary patch literal 1116 zcmaJ=&1=+95TAT*><7_8x3ws&Z7D=y54QCnMU;YK3rjKXsgXzArZMeqvd+s=iXc5n zk6spf^y8&&eug*)d6j!^aE(Q^h(4OKTxPYpwpysMmfVyY6nrAMkGT)ZI zSh{1yHPDhd#f>!|dGI{$_R=!#sYzZf>hpqR7Ms580kJ+b>3xH=SX(Dv(2GGOgA0;P zZLxf1796!9hSA?)t+F>2E94@Ku1xRfLTk0T(0vTKFt>N4LZCW+Y^CR;%(<=ztvgE;j)3e9Di$jcM3NH#b~?vX>3?$*1zqQY1l>@X&7 zUcsSWnq-~)HnBbUS-o}e>Zp2efB4w0{jleb?72_xzS;AK)_g_|AWRI>9>!PDljvl1 zVtrV@K(+}3d}^?Mf#1JdLQQEnDq)0CoTBt_lmZp`Mh)dmaG02wxLSSQw>0u`Vter0 z8r|RiZcQEA)sIy3%%L@dV`TXZ4dz3ut!(qc2V86i*G zQ5?hxV|ZPr9^t8B~k!#qaR?CjCwW zN4a6b`Hv%Kq5Sa%{&My6k}vfltfd0DM|g)^XBRv*$o8 GZ{sh;RuAa_ literal 0 HcmV?d00001 diff --git a/argenta/command/parse_input_command/entity.py b/argenta/command/parse_input_command/entity.py new file mode 100644 index 0000000..5e463a3 --- /dev/null +++ b/argenta/command/parse_input_command/entity.py @@ -0,0 +1,38 @@ +from typing import Literal, LiteralString +from argenta.command.entity import Command +from argenta.command.params.flag.entity import Flag +from argenta.command.params.flags_group.entity import FlagsGroup +from .exceptions import InvalidInputFlagsException + + +class ParseInputCommand: + def __new__(cls, *args, **kwargs): + raw_command = kwargs['raw_command'] + return ParseInputCommand.parse(raw_command) + + @staticmethod + def parse(raw_command: str) -> Command: + list_of__ = raw_command.split() + command = list_of__[0] + list_of__.pop(0) + + flags = [] + for k, _ in enumerate(list_of__): + if not _.startswith('-') or len( _[:len(_.lstrip('-'))]) > 3: + raise InvalidInputFlagsException() + else: + flag_name: str = _.lstrip('-') + flag_prefix = _[:len(flag_name)] + + parse_flag = Flag(flag_name=flag_name, + flag_prefix=flag_prefix) + + flags.append(parse_flag) + + if len(flags) == 0: + return Command(command=command) + elif len(flags) == 1: + return Command(command=command, flags=flags[0]) + else: + flags = FlagsGroup(flags=flags) + return Command(command=command, flags=flags) diff --git a/argenta/command/parse_input_command/exceptions.py b/argenta/command/parse_input_command/exceptions.py new file mode 100644 index 0000000..7dd5ebd --- /dev/null +++ b/argenta/command/parse_input_command/exceptions.py @@ -0,0 +1,3 @@ +class InvalidInputFlagsException(Exception): + def __str__(self): + return "Invalid Input Flags" diff --git a/argenta/input_command/entity.py b/argenta/input_command/entity.py deleted file mode 100644 index 5b90617..0000000 --- a/argenta/input_command/entity.py +++ /dev/null @@ -1,3 +0,0 @@ -class InputCommand: - pass - diff --git a/argenta/router/entity.py b/argenta/router/entity.py index 88515d5..31e910d 100644 --- a/argenta/router/entity.py +++ b/argenta/router/entity.py @@ -1,4 +1,5 @@ from typing import Callable, Any +from ..command.entity import Command from ..router.exceptions import (UnknownCommandHandlerHasAlreadyBeenCreatedException, RepeatedCommandException) @@ -11,19 +12,19 @@ class Router: self.title = title self.name = name - self._command_entities: list[dict[str, Callable[[], None] | str]] = [] + self._command_entities: list[dict[str, Callable[[], None] | Command]] = [] self.unknown_command_func: Callable[[str], None] | None = None self._is_main_router: bool = False self.ignore_command_register: bool = False - def command(self, command: str, description: str = None) -> Callable[[Any], Any]: + def command(self, command: Command) -> Callable[[Any], Any]: + command.validate_commands_params() self._validate_command(command) def command_decorator(func): self._command_entities.append({'handler_func': func, - 'command': command, - 'description': description}) + 'command': command}) def wrapper(*args, **kwargs): return func(*args, **kwargs) return wrapper @@ -42,9 +43,10 @@ class Router: return wrapper - def input_command_handler(self, input_command): + def input_command_handler(self, input_command: Command): + input_command_name: str = input_command.get_string_entity() for command_entity in self._command_entities: - if input_command.lower() == command_entity['command'].lower(): + if input_command_name.lower() == command_entity['command'].get_string_entity(): if self.ignore_command_register: return command_entity['handler_func']() else: @@ -56,11 +58,12 @@ class Router: self.unknown_command_func(unknown_command) - def _validate_command(self, command: str): + def _validate_command(self, command: Command): + command_name: str = command.get_string_entity() if command in self.get_all_commands(): raise RepeatedCommandException() if self.ignore_command_register: - if command.lower() in [x.lower() for x in self.get_all_commands()]: + if command_name.lower() in [x.lower() for x in self.get_all_commands()]: raise RepeatedCommandException() @@ -74,7 +77,7 @@ class Router: self.ignore_command_register = ignore_command_register - def get_command_entities(self) -> list[dict[str, Callable[[], None] | str]]: + def get_command_entities(self) -> list[dict[str, Callable[[], None] | Command]]: return self._command_entities @@ -103,6 +106,6 @@ class Router: def get_all_commands(self) -> list[str]: all_commands: list[str] = [] for command_entity in self._command_entities: - all_commands.append(command_entity['command']) + all_commands.append(command_entity['command'].get_string_entity()) return all_commands diff --git a/tests/mock_app/handlers/routers.py b/tests/mock_app/handlers/routers.py index d927fbf..6f0f4d0 100644 --- a/tests/mock_app/handlers/routers.py +++ b/tests/mock_app/handlers/routers.py @@ -1,4 +1,6 @@ from rich.console import Console + +from argenta.command.entity import Command from argenta.router import Router from ..handlers.handlers_implementation.help_command import help_command @@ -12,19 +14,19 @@ settings_router: Router = Router(title='Settings points:') console = Console() -@work_router.command(command='0', description='Get Help') +@work_router.command(command=Command(command='0', description='Get Help')) def command_help(): help_command() -@work_router.command(command='1', description='Start Solving') +'''@work_router.command(command='1', description='Start Solving') def command_start_solving(): start_solving_command() @settings_router.command(command='U', description='Update WordMath') def command_update(): - upgrade_command() + upgrade_command()''' @work_router.unknown_command diff --git a/tests/mock_app/main.py b/tests/mock_app/main.py index 32937fd..810fb7a 100644 --- a/tests/mock_app/main.py +++ b/tests/mock_app/main.py @@ -19,14 +19,14 @@ def main(): goodbye_message: str = f'[bold red]\n{ascii_goodbye_message}{' '*12}made by kolo\n' app.include_router(work_router, is_main=True) - app.include_router(settings_router) + #app.include_router(settings_router) app.set_initial_message(initial_greeting) app.set_farewell_message(goodbye_message) app.set_description_message_pattern('[bold red][{command}][/bold red] [blue]*=*=*[/blue] [bold yellow italic]{description}') - #app.start_polling() + app.start_polling() if __name__ == "__main__": main()