ait d Z ddlZddlZddlZddlmZ ddlmZmZ G d dej Z
G d dej Zd Z
d
Zd Zd Zd
Zd Zd ZddZd ZdZd Zd Zd ZdS )z:
Extensions for validation and output formatting argparse
N)PrettyTable)
parse_date
parse_period2c e Zd ZdZd Zd ZdS )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 | d r|dd S t j | || 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.pyr zSmartFormatter._split_lines sK ??4 )8&&(((%224uEEE c t |t r.| || }t |d S t j | || S )N )
isinstance
ParseDatetime_metavar_formatterstrr r
_format_args)r actiondefault_metavarget_metavars r r zSmartFormatter._format_args! sZ fm,, '11&/JJK{{1~~&&&%224QQQr N)__name__
__module____qualname____doc__r r r r r r sD F F F
R R R R Rr r c e Zd ZdZddZdS )r z
Interprets a string ([YY]YY-MM-DD[ HH:MM]) as a datetime for argument parsing.
return parsed data as
Nc t |d rd | n|} t | }n+# t $ r}t j | | d |d }~ww xY wt
|| j | d S )N__iter__ z/ is an invalid; use [YY]YY-MM-DD[ HH:MM] format)hasattrjoinr
ValueErrorr
ArgumentErrorsetattrdest)r parser namespacevalues
option_stringdatetime_strresult_datetimees r __call__zParseDatetime.__call__- s +26:+F+FRsxx'''F (66OO (PPP
49o66666s 9
A!AA!N)r r r r! r4 r" r r r r ( s2 7 7 7 7 7 7r r c j t | } | dk s| dk rt j | 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
r d z2 is an invalid; this value can range from 0 to 100)intr ArgumentTypeError)values r check_percentagesr; 9 s?
JJEqyyECKK(E)e)e)efffLr c t | }n+# t $ r}t j d| d |d}~ww xY wd| v s|dk rt j d| 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.r r8 r) r r9 )r: non_negative_intr3 s r check_non_negative_intrA F s u:: (XXXX
e||'!++(XXXX
:5:c t | }n+# t $ r}t j d| d |d}~ww xY wd| v s|dk rt j d| 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> r r? )r: positive_intr3 s r check_positive_intrE Z s 5zz (JJJJ
e|||q(((JJJJ
rB c t | }n+# t $ r}t j d| d |d}~ww xY wd|cxk rdk sn t j d| 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 253370754000Nr l c%| )floatr) r r9 )r: positive_floatr3 s r check_timestamprI n s u (]]]]
~,,,,,,,,(]]]]
rB c d} t | }n-# t $ r }t j d| d| |d}~ww xY wd| v s|dk s||k rt j d| 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> r r? )r: max_intr@ r3 s r check_from_zero_to_max_intrL s Gu:: (
'
'
'$
'
'
e||'!++/?'/I/I(
'
'
'$
'
'
s
>9>c t j | j }n+# t $ r}t j d| d |d}~ww xY w|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_idr3 s r check_user_namerS sd Y,u%%, Y Y Y()P%)P)P)PQQWXXYNs
A?Ac v t | }d| v s|dk rt j d| d t | dz } n# t $ r Y nw xY w t | }n4# t $ r'}t j t | |d}~ww xY w|dk rt j d| 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> r r= ze" is an invalid; time period should be greater than (or equal to) 1 minute (60 seconds); not negativemN<