From 37b62fd69b4f0362e1ee13cdfec05f28e4dd34de Mon Sep 17 00:00:00 2001 From: kolo Date: Mon, 17 Feb 2025 00:33:05 +0300 Subject: [PATCH] fix --- .../__pycache__/__init__.cpython-313.pyc | Bin 163 -> 163 bytes .../__pycache__/entity.cpython-313.pyc | Bin 2271 -> 2533 bytes .../__pycache__/exceptions.cpython-313.pyc | Bin 1278 -> 1278 bytes argenta/command/entity.py | 3 +- .../__pycache__/__init__.cpython-313.pyc | Bin 170 -> 170 bytes .../flag/__pycache__/__init__.cpython-313.pyc | Bin 175 -> 175 bytes .../flag/__pycache__/entity.cpython-313.pyc | Bin 1850 -> 2172 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 182 -> 182 bytes .../__pycache__/entity.cpython-313.pyc | Bin 554 -> 664 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 183 -> 183 bytes .../__pycache__/entity.cpython-313.pyc | Bin 1116 -> 2166 bytes .../__pycache__/exceptions.cpython-313.pyc | Bin 0 -> 601 bytes argenta/command/parse_input_command/entity.py | 39 +++++++++---- tests/test.py | 53 ++++++++++++++++++ 14 files changed, 83 insertions(+), 12 deletions(-) create mode 100644 argenta/command/parse_input_command/__pycache__/exceptions.cpython-313.pyc create mode 100644 tests/test.py diff --git a/argenta/command/__pycache__/__init__.cpython-313.pyc b/argenta/command/__pycache__/__init__.cpython-313.pyc index 26ac58cfc09972a66498ce07e87ed2eab3061f87..7a8b8f9e9277823045d251b24f9a5ce27320f57c 100644 GIT binary patch delta 19 ZcmZ3?xR{aqGcPX}0}#CZx?v*s3;;Ge1~C8t delta 19 ZcmZ3?xR{aqGcPX}0}!|at|tTY;<#Xk3@D3KwN(RX*bY;zBv^gh zWl|yJ^|mMM5RzmY;_Vdy3-<)=0Dt#&4r`FpE4=_f321~n)ZkzV^cdPIhX&@DCOyto zM{N|F?)`eTny(c)v6~0Rg(DvaF(b%f6~4sN&omlm-^B!Z%KnPO%$1ZO6C8<$eYpp- z@_+kKI|}4Cx$c9`{8>8-<3JJJKXSZmT453p(Ztd9GmA_AV1CfOtT&PkJ- zjfWgop{r<*3(uFHEPYlC)|F4KL=x*mo{?!AnN8b^jI|?U-DvhxbfOiW=<3G$_{QYR z$xYGIN80+x+qw7Rj`~6UIOk<^?QE`kFf(KI zbrjdF<*P;4?Sx#nS}!bD&<_@K$6` sCX)H;@-N`(w;W{Wl||zclKj^G|Daqu=rl#Iur1|`mL?Z}0tcV+4@*m(ZU6uP delta 436 zcmaDVd|#0FGcPX}0}wQ5txIQ|$opF&2FRJp5W`T!7|c+_6wFw}EXN?n5X>`Kfzg(i zONyb0JD9tOC!I-?cXI_}4kM%H=BG@@85yM}uVrzcT+S-W=r*~RRh224W%4~%S$1}i z*$fPmKd?zmmSW>pWQ6b;7(y9>IACl94b~+gl?ZfFG&fAx6v{|tjAopy#wO3m2Q*re zRUW7Y%%41+O;R$E4agOOX-Q>FXDH$a@-(?7>$0nf3Imx%%pigVM1WjXBsDpi-HTfm z$SlqV5)BNKkFYC7aEnezxh|%DQA~Y}@O5t8i`=?*giJ3BnP1>BzXOt+o;@*piOF?t zjf>nGYrHm;Y_Hx}eZ=d!j{ij+|2snZ7kKnPFf-@|FcwLG><|DFnoNFvn!J;}ILsJT zCpU5k3rK@x%22}t6 delta 19 ZcmZ3_xSo;wGcPX}0}x1RuA9ic1OP7k1hW7D diff --git a/argenta/command/params/flag/__pycache__/entity.cpython-313.pyc b/argenta/command/params/flag/__pycache__/entity.cpython-313.pyc index 44ef5fe6d223affc82ea1140dc80989d3986e018..0d607b6cf1ca0438c7d130fd542751829d221b72 100644 GIT binary patch delta 724 zcmZ9J&1(};5WwH;=55m?yNQOzvTM?4YhyrTgZ10?px{X=vb1<8EU}Ftx+1*Yh^2>m zQS?wWK6(|s8Bc;2@vo@RLs%7a7hz2)z4YMBmh|9+{AT9ue7^V9*vshKx}IPte|A1K zKDPCyxs1*RTVw)kCKMZlT440E)9u$&MU#nyoj@k-*Z{WDBDpq1EUh3t{7qRuE zyrukxw7jC4kdX^&1^G;!x3ZYG1c-rS;%ln)eZZGs6My$%QiRT)GYl}ABEkwFH- zjk>?zHZX3uwMON@KSGfy#8cKyXJ4(pT-}VDB5J7M=|ISi8dA9pb|>QwzTmF6qwd1Q zqp}k94tTVqM`^{u4Bme;9Qc&z(N*CLIcq&BvY)@JXCOa91=XmaIEHorPdpl;NF`;7 z&q7|_<1LLxYs(*e3=Fx)Z>}A}AVHf6i!er*Km;R>QO-X!j+?Il delta 441 zcmew(u#1oPGcPX}0}$M_Tc0j6kvCH+0?3)l5W`T!7|c+_6wFw}EXM$X!MqbE7>LBM zm@ox%Nik%x6mbP}7jdWaX!1>bP|0XAIf~I#I-Ox9qn{>A5j)U~A`TG24I)4mOg_Lk zNnRSrXkhrj!62pF!*@ek?Fxs)4Hb(k9EvxzT&{AcPp)8kEyD*?bBnjQq$o2lJw7$B zB(tQlm{%k#F)k=1@kV&77?IjIts?8BOLQkftIDkWR*mVrH;vkn&JA zJ4VsTQ`kxwStj$d%QNy!)@S$O762(00};}bC$P)r3xSyYAc7S}umBmwfk2{-;enOy z4HL^7#ugvh*;!o~7bt&V0MR$(R4=HRU6eEbzzpI(&^7$P3SxXZ&D?5n$ zNr;tI_5&X;tHciF?+ieyNNBPmhn%e{$R@bOw>WHa^HWN5QtgV=ff9@$+d+~am>C%v S?=nbzXOm-;_{0DtzE@4do diff --git a/argenta/command/params/flags_group/__pycache__/__init__.cpython-313.pyc b/argenta/command/params/flags_group/__pycache__/__init__.cpython-313.pyc index e0f1d5f9b68012f3259834b93aa1369266200110..6c90035e6fd04d5a864e1c90d005bfb030e7898d 100644 GIT binary patch delta 19 ZcmdnSxQ&tfGcPX}0}#CZx?v*sY5+L;25JBR delta 19 ZcmdnSxQ&tfGcPX}0}uphuA9ic8UQg=1pxp6 diff --git a/argenta/command/params/flags_group/__pycache__/entity.cpython-313.pyc b/argenta/command/params/flags_group/__pycache__/entity.cpython-313.pyc index f51981b4d61ad6efad6589f8cf0602c907e49ae8..06c82379efa755d0e6011303642b90c8048fa9ce 100644 GIT binary patch delta 403 zcmX|5Jxc>Y5S`uIO=9#c#GobwBv|B{voPtzGJ-;yZPP6II1=uXFqafou?m7%gcyj0 zU~T1J@L$M*KOlt=43gH_^J8Ei@9n%dGtXi!?Uik(f$HPy#k-%_2cshrGf<$|C0sCM zhp-O?P&^CDDsy86K<)`gE(~>8Br3l4>PGyP^-ESoA~UD~GDRW9&{Di6YEsgFi7P7$ z9f1iYFzHDr5v42suJ*!n><#-1L7qsqXm&WcJ(idxJ$b#!n`~&rHN0iAcj*;Tzzu?` zlbW_z*^Y$Y4hLwiz^&;c%a67V-85j*F_`h;4#60foXOn0@l<-~tbr)TcH^u%R#edF zHM;}t)_XyqyA8LmQ3s)GE_12T9$fvbibrS6{Qq@P>NMyzhDE=5hI`au^x~yUi!t^N NC+h@fxlbU7L*HB9QvCn` delta 316 zcmbQix{8JOGcPX}0}wQ5txNZx$SavD0pv_&kYG?^2xgFC2xc^80!cG46fvYTX)-56 zI1rK%%K0n>WK3m|T^#TJRF2 zYvN9Q_FJrJAi;@mJ7hst6te?~28J7=QoUTCflP)XHXz}r$u@ZsqiKB+$dR{1=1mz(u`wW_CA(fOyi*yqS3)^WOW- z+jcx20hs=Iey@010N`)32#EKY_65w`0t!%=aWKX}W{ibwmaN%vZj6UK<+*WTOoSrk z`SH-01SQN1iZ~t~i@-=0bc3Bh3H1O)I?Q^OVYC>QBdcT~vnceb=^9Wkp}5Z|E;Oy8 z%%ISzO1Z3C)0pKyF6m?|LT2X^SgG2p4AEy$&spnhy<|?Gwd|@(kI!5y7`AIxtb*sy z8*!MF+8^NQ7RUq0C;+kw138850g%rN3YQlZJ|8;7D?$&r%pdkuprnW}Tnxz)>O8MQ z$DqFa+pS7isz5Fi5Qmur{(Mg=_CcIm+*BX|CW*`@Qn|yvl|G!82^59;tXA+-z``gN zM}ke<%RJ%=B?s|3EILTMGD~Lo78Yf>b7lI(~y7(61>P^57FV0>9|^DM$@QE>IpGd5Tn7Z zM0Oj|j(9JP-iFvDua*)dK|@k6^!BT-jA{{hIM4BL9Xw8Lf0WwYO6^`uy;}<}ZP{8M zx%pl#v?O(Y7rzl-(EpUWA9rl23CpS8y7@5Gf8%s*WGR`tef;L}2KOl0*Gl&N!rlF> zx&P#E+`WJp^(|=rD>>piDA6QHuY<3)cykqB2-9L2S-F2sT zA-t5?-bnnIYmz8$+6t6zNB(f_mybjkmA zgIJ}ecnB?p?Zf#rC|Lf8Do`up=5-F?8^?{6iKHDkw~q%sY)l^Up> z@x_leV@F{cNB%RIkRwRKO$QeqH>8NBl`GTL65(T-cD1UP{F8*H&6v<}OQvO562PZ z8OsWX)+8WqS!26}TzzN_;Hhz>O{O-7_uFLOvqB6^$T1|kb2k3vK>}zZEZddXu@Wb-Epb1CA&|NuaQpYh|sZqn>cRoGKY;SdfDya8h&N7)6cW06^K0wz^>2 zJ6g=vn2eS_B=POuuba2lG>r`tAd-(+%#oTdk^BzmQ=?JP|59 z6_ywazlj6lkG0j;kwiD>qE{266goMGcU&Migq=UyLnscp1v{g0;BPe#wy4-zWOT6U z1;`z?K>i+|eHLa2ahxE^CNtjqcgRAA$7a=^A=roSX8O&uujbr&=EmEXUoy*|&1IY> z~Kpr7ZE{3!KD-q!QtQ$ujzSu&DEDw)XB+j;O^?? z$C0c~4uVj-n_TY%2Q&QNOJ4rJyu3-Hu|VwloW91Xjqh$#u4<7?nl^bN8)SHfSClxDCB&I&=-meveR*q=pj2GflQ&A!vDCcjPv%}r+R0&k!RhDK+ z*t^pgnS>r@mm<svB?1v+cNnDxi0%a;JI$2=`6%K(D}l}-~WWCnnB zYc}hS&UF$2*BX=au@=hK92gg!)SS4v<>CgS=B+%EDWlc)?2apUeP-&v Command: - list_of__ = raw_command.split() - command = list_of__[0] - list_of__.pop(0) + list_of_tokens = raw_command.split() + command_name = list_of_tokens[0] + list_of_tokens.pop(0) flags = [] - for k, _ in enumerate(list_of__): - if not _.startswith('-') or len( _[:len(_.lstrip('-'))]) > 3: - raise InvalidInputFlagsException() + current_flag_name = None + current_flag_value = None + for _ in list_of_tokens: + flag_prefix_last_symbol_index = _.rfind('-') + if _.startswith('-'): + if current_flag_name or len(_) < 2 or len(_[:flag_prefix_last_symbol_index]) > 3: + raise + else: + current_flag_name = _ else: - flag_name: str = _.lstrip('-') - flag_prefix = _[:len(flag_name)] + if not current_flag_name: + raise + else: + current_flag_value = _ + if current_flag_name and current_flag_value: + flag_prefix = _[:flag_prefix_last_symbol_index] + flag_name = _[flag_prefix_last_symbol_index:] + + flags.append(Flag(flag_name=flag_name, flag_prefix=flag_prefix)) + + current_flag_name = None + current_flag_value = None + + command = Command(command_name, flags) + + return command - parse_flag = Flag(flag_name=flag_name, - flag_prefix=flag_prefix) - flags.append(parse_flag) if len(flags) == 0: return Command(command=command) diff --git a/tests/test.py b/tests/test.py new file mode 100644 index 0000000..39f49a9 --- /dev/null +++ b/tests/test.py @@ -0,0 +1,53 @@ +import re +from pprint import pprint + + +class CommandParseError(Exception): + pass + +def parse_command(command: str) -> dict: + pattern = re.compile(r""" + (?P^\S+) + | + (?P-{1,3})(?P\w+) + | + (?P\S+) + """, re.VERBOSE) + + tokens = pattern.findall(command) + if not tokens: + raise CommandParseError("Invalid command format") + + result = {} + args = {} + current_arg = None + + for token in tokens: + command_name, arg_prefix, arg_name, value = token + + if command_name: + if "command" in result: + raise CommandParseError("Multiple command names found") + result["command"] = command_name + + elif arg_name: + if current_arg: + raise CommandParseError(f"Argument {current_arg} has no value") + current_arg = f"{arg_prefix}{arg_name}" + + elif value: + if not current_arg: + raise CommandParseError(f"Unexpected value: {value}") + args[current_arg] = value + current_arg = None + + if current_arg: + raise CommandParseError(f"Argument {current_arg} has no value") + + result["args"] = args + return result + + +command_str = "run" +parsed = (command_str) +pprint(parsed)