From 905698384a91f0891bffade33935c1060c6095c3 Mon Sep 17 00:00:00 2001 From: kolo Date: Fri, 21 Feb 2025 01:46:03 +0300 Subject: [PATCH] work on v0.3.0 --- argenta/command/entity.py | 2 +- .../__pycache__/entity.cpython-313.pyc | Bin 2753 -> 3073 bytes .../__pycache__/exceptions.cpython-313.pyc | Bin 1446 -> 2082 bytes argenta/command/input_comand/entity.py | 8 ++++++-- argenta/command/input_comand/exceptions.py | 8 ++++++++ argenta/command/params/flag/entity.py | 15 +++++++++------ argenta/router/entity.py | 16 +++++++++++++++- argenta/router/exceptions.py | 5 +++++ tests/mock_app/handlers/routers.py | 12 ++++++++---- 9 files changed, 52 insertions(+), 14 deletions(-) diff --git a/argenta/command/entity.py b/argenta/command/entity.py index 3cc8c0d..f0db2c9 100644 --- a/argenta/command/entity.py +++ b/argenta/command/entity.py @@ -12,7 +12,7 @@ class Command: flags: Flag | FlagsGroup | None = None): self._command = command self._description = description - self._flags = flags + self._flags: FlagsGroup | None = flags if isinstance(flags, FlagsGroup) else FlagsGroup([flags]) if isinstance(flags, Flag) else flags self._input_flags: InputFlag | FlagsGroup | None = None diff --git a/argenta/command/input_comand/__pycache__/entity.cpython-313.pyc b/argenta/command/input_comand/__pycache__/entity.cpython-313.pyc index ae03cc981a5247396ab5e9fc41ac9614ed7fff9c..58befab8d8ba766fd7686f324b3e4883a29f7c28 100644 GIT binary patch delta 1191 zcmaJ>-EZ4e6hGIFo!E}EHc26A>NRPKwn%Ks;RH}UGzv9oA+R7XgavBN2Ye@BwI%12 z+Z^Npa-5esV>N7y&4zo%>aMz{I!5cM^9{4>wr$Hx&6!=(aLwkx=X`cOiO@dMLqF~x zX0@V}9GL z`9w$@tIK}xx^g3y}EM*CD!72_BO?>R)kS93ZPTTePuHD5VP3XyvYhc%Tt?e#* z0$yrcO^@%G7UroF2U&#VnC{{^qqAyyQj3a9ba0M0%tXh3cDI z03L5xYglDz9-u52!J0p>NT=<%i}uo@YrkSz4$hKq#pg;BEH1;2$!+#J{5&2y?@30d z^G`{&?`ha8D~8o{A~ZVvAHpN#`Ct~UlMBI<=qK_;@Wu;;;+M16XTK{{dSlhiLS_Bc zTiTIL?Z^+>BUHO2ZH!g7V%n|P)Mjj|7dv__*^51~6;FOtylDlI}X|`au}N5@QG8?B94-~p+c4!{Hx;> zyH}V3?Y0{$rn_uYj45>Z7I@3MWD2Qj+K zQ3?Ae7_!w|#Cvdn3I*k`x%Wjm{R#S$5c>nd0{KgtL?X$^**E;ritbvM4iHPMI{Rl} zWza{FNrT?JP+`Sxu6E3mxI`WFVS{s&vO7FN=x2Cw8^*R_W*hRqL3T$3A^iT6?>zk` Xx+hMf%%zztrK`n{_1}Rie#*ZAXK5b* delta 844 zcmZ8fO=uHA6n?Xt+23TFHVv({3Hg(Dg@UcEL8yh&gPOEOj5#$BLX*bWWD{n$LM)=9 z2M-=BgII4~1ra=nhzG%=NGTpv|Rn;wH_y%F#1IR%RWg&wIig7Gtg^Wl<4~tn}1{3UIUslSBAA+Td{JV=u4-4D;?+`p zqv9&1a=ExxFI8Q!WVKzj$}-%wiJw)HFjJywb^Kttg_9yV*dykr010+xVV_@S|7Y+w5jJpMT~ zz7vdpJZA0&69igG z={+qH^ji1@_Riy{FSQAC9LKj$?gKMB$>}b)T@j>#uE0=l2w!;F4A4G3s<~3da%xVS z_~@*jLYS8HPn{;jFCLoF_=_ybY|X%`VIddVTdLosC=k~Lk3X_(!h1RQx$DVrv%1?(U`WAgU#*q5Q;+(Q|KGYro+{Xtl zud7^&7wv?YCI1P6If9b}Cc!)bCy2PoT8JTyMnDbs*`5Z573ENP&|N(}Tk_goHT3GY zTJ27FqgibPs}E{kJM_0&KWB)8N(VpA^hA<&BuOYr4K0px$wBHyi~pfI@49}=4_#L^ zsCdb$(a7SDW=;RZL3ql_aGRCl7-RA`*u6{oBD3{k_iB6;S8a3Ecj|hl-SlfHhTlaU z{C+jybuaX4sE+$B9&UQLpvo)U5{Hr5)|5DL1nqz4kIvDl_?&1uy}!nTnu1Wc?jg(! zY=lQ_tU=!S=3M*WzxTg7YoDF9FV3BvmC8HhTb6V-P4%!oPS$6f z!C1Wc1S2aW4@gTfBal!i;+}kysfwEq$S&dp5`LPK!viq98&VM1W0!m<{5} z!3b_3qZs7iHioZEjI8QKU^O6VKTX!j9qgtWV5O+qZ*kb<=BJeAq}mm!09Ar~R;)Dn O6}tl0R|Y0Vh#3GX0W|FZ diff --git a/argenta/command/input_comand/entity.py b/argenta/command/input_comand/entity.py index ba31a10..33c4fa3 100644 --- a/argenta/command/input_comand/entity.py +++ b/argenta/command/input_comand/entity.py @@ -1,4 +1,4 @@ -from ..input_comand.exceptions import IncorrectInputFlagException +from ..input_comand.exceptions import IncorrectInputFlagException, RepeatedInputFlagsException from ..entity import Command from ..params.flag.flags_group.entity import FlagsGroup from ..params.flag.input_flag.entity import InputFlag @@ -46,7 +46,11 @@ class InputCommand(Command, Generic[T]): flag_prefix=flag_prefix) input_flag.set_value(current_flag_value) - flags.add_flag(input_flag) + all_flags = [x.get_string_entity() for x in flags.get_flags()] + if input_flag.get_string_entity() not in all_flags: + flags.add_flag(input_flag) + else: + raise RepeatedInputFlagsException(input_flag) current_flag_name = None current_flag_value = None diff --git a/argenta/command/input_comand/exceptions.py b/argenta/command/input_comand/exceptions.py index 4cf0ec0..d8a5125 100644 --- a/argenta/command/input_comand/exceptions.py +++ b/argenta/command/input_comand/exceptions.py @@ -13,4 +13,12 @@ class IncorrectInputFlagException(Exception): return "Incorrect Input Flags" +class RepeatedInputFlagsException(Exception): + def __init__(self, flag: InputFlag): + self.flag = flag + def __str__(self): + return ("Repeated Input Flags\n" + f"Duplicate flag was detected in the input: '{self.flag.get_string_entity()}'") + + diff --git a/argenta/command/params/flag/entity.py b/argenta/command/params/flag/entity.py index c772a4d..ddf7e64 100644 --- a/argenta/command/params/flag/entity.py +++ b/argenta/command/params/flag/entity.py @@ -6,20 +6,23 @@ class Flag: flag_prefix: Literal['-', '--', '---'] = '-', ignore_flag_value_register: bool = False, possible_flag_values: list[str] = False): - self.flag_name = flag_name - self.flag_prefix = flag_prefix + self._flag_name = flag_name + self._flag_prefix = flag_prefix 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() - else: - string_entity: str = self.flag_prefix + self.flag_name + string_entity: str = self._flag_prefix + self._flag_name return string_entity + def get_flag_name(self): + return self._flag_name + + def get_flag_prefix(self): + return self._flag_prefix + def get_value(self): return self._value diff --git a/argenta/router/entity.py b/argenta/router/entity.py index b4de5e2..ef34f86 100644 --- a/argenta/router/entity.py +++ b/argenta/router/entity.py @@ -2,8 +2,9 @@ from typing import Callable, Any from ..command.entity import Command from ..command.input_comand.entity import InputCommand from ..command.input_comand.exceptions import InvalidInputFlagException +from ..command.params.flag.flags_group.entity import FlagsGroup from ..router.exceptions import (UnknownCommandHandlerHasAlreadyBeenCreatedException, - RepeatedCommandException) + RepeatedCommandException, RepeatedFlagNameException) class Router: @@ -82,6 +83,12 @@ class Router: if command_name.lower() in [x.lower() for x in self.get_all_commands()]: raise RepeatedCommandException() + flags: FlagsGroup = command.get_flags() + if flags: + flags_name: list = [x.get_string_entity().lower() for x in flags] + if len(set(flags_name)) < len(flags_name): + raise RepeatedFlagNameException() + def set_router_as_main(self): if self.name == 'subordinate': @@ -125,3 +132,10 @@ class Router: all_commands.append(command_entity['command'].get_string_entity()) return all_commands + + def get_all_flags(self) -> list[FlagsGroup]: + all_flags: list[FlagsGroup] = [] + for command_entity in self._command_entities: + all_flags.append(command_entity['command'].get_flags()) + + return all_flags diff --git a/argenta/router/exceptions.py b/argenta/router/exceptions.py index edfee7f..7cc3868 100644 --- a/argenta/router/exceptions.py +++ b/argenta/router/exceptions.py @@ -11,3 +11,8 @@ class UnknownCommandHandlerHasAlreadyBeenCreatedException(Exception): class RepeatedCommandException(Exception): def __str__(self): return "Commands in handler cannot be repeated" + + +class RepeatedFlagNameException(Exception): + def __str__(self): + return "Repeated flag name in register command" diff --git a/tests/mock_app/handlers/routers.py b/tests/mock_app/handlers/routers.py index 1087383..60ae4ab 100644 --- a/tests/mock_app/handlers/routers.py +++ b/tests/mock_app/handlers/routers.py @@ -12,11 +12,15 @@ settings_router: Router = Router(title='Settings points:') console = Console() +flagi =FlagsGroup(flags=[ + Flag(flag_name='host', + flag_prefix='--',), + Flag(flag_name='port', + flag_prefix='--',) +]) -@work_router.command(command=Command(command='0', description='Get Help', flags=Flag(flag_name='host', - flag_prefix='--', - ignore_flag_value_register=True, - possible_flag_values=['tester', 'ffmpeg']))) + +@work_router.command(command=Command(command='0', description='Get Help', flags=flagi)) def command_help(args: FlagsGroup): flags = args.get_flags() for flag in flags: