aitdZddlZddlZddlZddlmZddlmZmZGddej Z Gddej Z d Z d Zd Zd Zd ZdZdZddZdZdZdZdZdZdS)z: Extensions for validation and output formatting argparse N) PrettyTable) parse_date parse_period2ceZdZdZdZdZdS)SmartFormattera# Format argparse help in many line, to format many lines use "R|" at start line >>>import argparse >>>parser = argparse.ArgumentParser(formatter_class=SmartFormatter) >>>parser.add_argument('-a', '--argument', help="R| Descriptions: \n first new line\n second new line") c|dr|ddStj|||S)NzR|) startswith splitlinesargparse HelpFormatter _split_lines)selftextwidths /builddir/build/BUILDROOT/lve-stats-4.3.2-1.el9.x86_64/opt/cloudlinux/venv/lib/python3.11/site-packages/lvestats/lib/commons/argparse_utils.pyrzSmartFormatter._split_linessK ??4  )8&&(( (%224uEEEct|tr.|||}t|dStj|||S)N) isinstance ParseDatetime_metavar_formatterstrr r _format_args)ractiondefault_metavar get_metavars rrzSmartFormatter._format_args!sZ fm , , '11&/JJK{{1~~&& &%224QQQrN)__name__ __module__ __qualname____doc__rrrrrrsD FFF RRRRRrrceZdZdZddZdS)rz Interprets a string ([YY]YY-MM-DD[ HH:MM]) as a datetime for argument parsing. return parsed data as Nct|drd|n|} t|}n+#t$r}t j||d|d}~wwxYwt ||j|dS)N__iter__ z/ is an invalid; use [YY]YY-MM-DD[ HH:MM] format)hasattrjoinr ValueErrorr ArgumentErrorsetattrdest)rparser namespacevalues option_string datetime_strresult_datetimees r__call__zParseDatetime.__call__-s+26:+F+FRsxx'''F  (66OO   (PPP    49o66666s9 A!AA!N)rrr r!r4r"rrrr(s2 7 7 7 7 7 7rrcjt|}|dks|dkrtj|d|S)z Check if input argument between 0 and 100 :param str value: :return int: percent :except argparse.ArgumentTypeError: generate exception for command line warning message rdz2 is an invalid; this value can range from 0 to 100)intr ArgumentTypeError)values rcheck_percentagesr;9s? JJE qyyECKK(E)e)e)efff Lrc t|}n+#t$r}tjd|d|d}~wwxYwd|vs|dkrtjd|d|S)z Check if input argument greater than (or equal to) zero and not float :param str value: :return int: :except argparse.ArgumentTypeError: generate exception for command line warning message "zA" is an invalid; must be a number greater than (or equal to) zeroN.rr8r)r r9)r:non_negative_intr3s rcheck_non_negative_intrAFsu:: ( X X X X    e||'!++( X X X X     :5:c t|}n+#t$r}tjd|d|d}~wwxYwd|vs|dkrtjd|d|S)z Check if input argument is digest, greater than zero and not float :param str value: line to check :return int: positive integer :except argparse.ArgumentTypeError: generate exception for command line warning message r=z3" is an invalid; must be a number greater than zeroNr>rr?)r: positive_intr3s rcheck_positive_intrEZs5zz ( J J J J    e|||q((( J J J J    rBc t|}n+#t$r}tjd|d|d}~wwxYwd|cxkrdksntjd|d|S)a= Check if input argument is a correct timestamp 253370754000.0 == time.mktime(datetime.datetime(year=datetime.MAXYEAR, month=1, day=1).timetuple()) :param str value: line to check :return float: timestamp :except argparse.ArgumentTypeError: generate exception for command line warning message r=zF" is an invalid; timestamp must be a number between 0 and 253370754000Nrlc%|)floatr)r r9)r:positive_floatr3s rcheck_timestamprInsu ( ] ] ] ]    ~ , , , , , , , ,( ] ] ] ]    rBcd} t|}n-#t$r }tjd|d||d}~wwxYwd|vs |dks||krtjd|d||S)a Check if input argument less then maximum integer number PostgreSQL - 2147483647 MySQL - 2147483647 SQLite - 9223372036854775807 :param str value: :return int: :except argparse.ArgumentTypeError: generate exception for command line warning message ir=zP" is an invalid; must be a number greater than (or equal to) zero and less than Nr>rr?)r:max_intr@r3s rcheck_from_zero_to_max_intrLsGu:: ( ' ' '$ ' '     e||'!++/?'/I/I( ' ' '$ ' '    s >9>c tj|j}n+#t$r}t jd|d|d}~wwxYw|S)z Check if user present in system and convert user name to user id :param str value: user name (login) :return int: user id :except argparse.ArgumentTypeError: generate exception for command line warning message zuser "z" not present in systemN)pwdgetpwnampw_uidKeyErrorr r9)r:user_idr3s rcheck_user_namerSsdY,u%%, YYY()P%)P)P)PQQWXXY Ns A?Acv t|}d|vs|dkrtjd|dt|dz}n#t$rYnwxYw t |}n4#t$r'}tjt||d}~wwxYw|dkrtjd|d|S) z Parse multiple period line, and validate input data :param str value: line to parsing :return int: period in seconds :except argparse.ArgumentTypeError: generate exception for command line warning message r>rr=ze" is an invalid; time period should be greater than (or equal to) 1 minute (60 seconds); not negativemN<zW" is an invalid; time period should be greater than (or equal to) 1 minute (60 seconds))r8r r9rr)r)r: int_convertedsecondsr3s r period_typerYs   E %<<=A--,6E666 M""S(      8&& 888(Q00a78||( $ $ $ $    Ns*AA AAA'' B1"BBTc|ptj}|}|dkr2|dddd}|tjdz }n||dkr|dddd}|}nZ|r/|dd}|dd}n|}|}|tjt |z}||fS) aP Extented period_type function Added support 'yesterday' and 'today' :param bool round_to_minutes: :param str value: line to parsing :return tuple: period from to (, ) :except argparse.ArgumentTypeError: generate exception for command line warning message yesterdayr)hourminutesecond microsecondr)daystoday)r^r_)rX)datetimeutcnowlowerreplace timedeltarY)r: datetime_nowround_to_minutes datetime_to datetime_froms r period_type2rks  =8#4#;#;#=#=L KKMME "**!AST*UU #h&8a&@&@&@@ '  $,,!AaUV,WW "  '(00q0IIM&..aQ.GGKK(M&K+K4F4FGGGG + %%rc|d}|dd}t|dd}|D] }d|j|< tt|j||dS) z Prepare aliases descriptions to table formatted :param tuple|list|iter description: massive of data :return str: ascii table rrNr ) padding_width left_paddinglF)border)ralignlistmapadd_row get_string) descriptionfieldstablefields rformat_aliasesrzs} ^Fabb/K aa @ @ @E!!  EU]K ( ()))   5  ) ))rZcn|dd}t|Gfddtj}|S)NrceZdZdfd ZdS)!alias_action..AliasActionNc |jdv}|rUg}|D]O}|tt|dPn;|ddg}t|t }|rRt } d |} tj |d| dd |  fd |D} |s| d } t||j| dS) N)+*,r='z", "z alias(es) "z" not valid; choice from: z, c g|] }| Sr"r").0_aliases_func_dicts r z>alias_action..AliasAction.__call__..s<<.AliasAction.__call__sw!Z:5N A"JJDNN6$ 0B0B30G0G#H#HIIIIJ"<<,,22377==??@$'w<<#:#:3?P;Q;Q#R#R # #():#;#; &,kk2F&G&G#,B"5BB$(II.>$?$?BB =<<>> _alias_dscr_to_dict((('al_1', 'al_2', 'al_m1', 'description1'), ('al_3', 'al_4', 'al_m2', 'description1'))) {'al_2': 'al_m1', 'al_1': 'al_m1', 'al_m1': 'al_m1', 'al_3': 'al_m2', 'al_m2': 'al_m2', 'al_4': 'al_m2'} :param tuple|list alias_dscr: :type return: dict cTg|]$}||f%Sr")rd)rr val_index_s rrz'_alias_dscr_to_dict..&s2TTTA1Z=..00!J-@TTTrrrc0g|]}||fSr"r")rr key_index_rs rrz'_alias_dscr_to_dict..(s&"V"V"VaAjM1Z=#A"V"V"Vr)rangelenrdict)raliases_func_pairsrrrs @@rrrsJTTTTTTTC 1 ..233XX !!"V"V"V"V"V:"V"V"VWWWW/00 rct|d|j}}|jr |j\}}t|d|||_|S)Nfrom)getattrtoperiodr+)r. period_from period_tos rargparse_process_periodr-sN$Y77K2!*!1 Y Iv{+++IL r)NT)r!r rNrb prettytablerlvestats.lib.commons.dateutilrrr rrrr;rArErIrLrSrYrkrzBY_USAGE_PERCENTrrrr"rrrs ######CCCCCCCCRRRRRX+RRR&77777HO777"   ((*4   <&&&&8 * * *   F&r