%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /opt/alt/python37/lib/python3.7/site-packages/cllimits/lib/__pycache__/
Upload File :
Create Path :
Current File : //opt/alt/python37/lib/python3.7/site-packages/cllimits/lib/__pycache__/limits.cpython-37.pyc

B

�2Lb���@s�ddlmZddlmZddlmZddlmZddlZddlZddlm	Z	ddl
mZmZddl
mZmZdd	lmZdd
lmZddlmZmZmZdd
lmZmZmZmZmZmZmZm Z m!Z!ddl"m#Z#m$Z$m%Z%ddl&m'Z'ddl(m)Z)m*Z*ddl+m,Z,m-Z-m.Z.m/Z/ddl0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8ddl9m:Z:ddl;m<Z<Gdd�de:�Z=dd�dd�dd�dd�dd�dd�dd�dd�d d�d!d�d"�
Z>d#d$d%gZ?d&d'gZ@Gd(d)�d)eA�ZBdS)*�)�print_function)�absolute_import)�division)�
basestringN)�ClPwd)�
MySQLGovernor�MySQLGovException)�	iteritems�
itervalues)�CloudlinuxLicenseLib)�defaultdict)�convert_to_kernel_format�is_active_reseller_limits�lve�)	�parse_cloudlinux_limits_opts�AVAILABLE_LIMITS�AVAILABLE_LVE_KEYS�AVAILABLE_MYSQL_KEYS�AVAILABLE_QUOTA_KEYS�AVAILABLE_KEYS�AVAILABLE_LVP_KEYS�ADMIN_ONLY_OPTIONS�AVAILABLE_MYSQL_KEYS_ALL)�QuotaDisabledException�ClQuotaException�
ClQuotaLib)�convert_mem_value_to_bytes)�print_dictionary�replace_params)�LveCtl�CageFs�CageFsException�LvectlException)�cpinfo�reseller_users�is_reseller�	getCPName�NotSupported�domain_owner�is_admin�get_main_username_by_uid)�FormattedException)�
EncodingErrorc@seZdZdS)�DomainExceptionN)�__name__�
__module__�__qualname__�r2r2�D/opt/alt/python37/lib/python3.7/site-packages/cllimits/lib/limits.pyr.%sr.c	Cs4|d�dttt|��r"d�|�n|��d�i�S)N�cpu�allz{}%�d)�update�str�intr
�isdigit�format)�limits�valuer2r2r3�<lambda>*sr>cCs|d�d|i�S)N�ior5)r7)r<r=r2r2r3r>/�cCs|d�d|i�S)Nr4�mysql)r7)r<r=r2r2r3r>0r@cCs|d�dtt|�d�i�S)Nr?rAi)r7r8r9)r<r=r2r2r3r>2r@cCs0|d�|�d�d��|�d�d��d��S)N�inodes�,rr)�soft�hard)r7�split�strip)r<r=r2r2r3r>3scCs|�d|i�S)N�ep)r7)r<r=r2r2r3r>7r@cCs|�d|i�S)N�nproc)r7)r<r=r2r2r3r>8r@cCs|�dt|�i�S)N�pmem)r7r)r<r=r2r2r3r>9scCs|�dt|�i�S)N�vmem)r7r)r<r=r2r2r3r>;scCs|�d|i�S)N�iops)r7)r<r=r2r2r3r>=r@)
�speedr?z	mysql-cpuzmysql-iorB�
maxEntryProcsrIrJrKrL�rootZadmin�-ZabusersZsinglec@seZdZdZdZdZdZdZdZdZ	dd�Z
dAdd�Zd	d
�Zdd�Z
d
d�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zed�dd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zd*d+�Zd,d-�Zd.d/�Zd0d1�Z d2d3�Z!d4d5�Z"d6d7�Z#d8d9�Z$d:d;�Z%d<d=�Z&dBd?d@�Z'dS)C�CloudlinuxLimitsz2
    Class for run cloudlinux-limits commands
    NFcCs2t�|_t�|_t�|_t�|_t�|_	i|_
dS)z#
        Empty constructor
        N)r�_clpwdr �_lvectlr!�_cagefsr�	_cl_quotar�_mysql_governor�_users_list)�selfr2r2r3�__init__TszCloudlinuxLimits.__init__�successcCs2t|t�r|�|t��d��t||jp*|�dS)z�
        Output data wrapper
        :param: `dict` data - data for output to stdout
        :param: `bool` force_json - always output json format
        )�result�	timestampN)�
isinstance�dictr7�timer�_is_json)rX�dataZ
force_jsonr[r2r2r3�
print_databs
zCloudlinuxLimits.print_datacCs�t�}|��s"d|_|�ddi�Sd|k|_|�|�|_|j�d�sP|j�d�rnt��sn|�dd�	t
��i�|j�d�dk	r�t��s�|�dd	i�|��|�
�|jd
r�|��S|jdr�|��S|jdr�|��S|jd
r�|��S|�ddi�SdS)z$
        Run command action
        Tr[zCloudlinux license isn't validz--jsonz--for-resellerz--reseller-namez;--for-reseller/--reseller-name options not supported on {}.NzEReseller limits are not supported. Can not use --for-reseller option.�set�getzdisable-reseller-limitszenable-reseller-limitszUnknown action, exit)rZget_license_statusr`�_error_and_exit�_parse_args�_optsrdrZis_panel_supportedr;r'Zreseller_limit_supported�_verify_reseller�_check_user_owner�_set_run�_get_run�_disable_reseller_limits�_enable_reseller_limits)rX�argvZlicencer2r2r3�runms0





zCloudlinuxLimits.runcCs<t||j�\}}|s"|�t|��t|dt�r8d|d<|S)z%
        Parse CLI arguments
        z--lve-idr)rr`rerr]r)rXrnZstatusrar2r2r3rf�szCloudlinuxLimits._parse_argscCsh|j�d�}|sdS|j�d�dkr(dS|��\}}|dkr@dS||�|�krd|�d||d�d��dS)	z�
        Checks that specified reseller is an owner of specified user and
        terminate program if need
        :return:
        z--for-resellerNz--lve-idr)NzN/Az2%(username)s is not owned by reseller %(reseller)s)�username�reseller)r[�context)rgrd�_check_user�_get_reseller_namere)rX�for_reseller�_rpr2r2r3ri�sz"CloudlinuxLimits._check_user_ownercCs4|jds$|jdr$|jd|jd<|��|��S)z#
        Run `get` command
        z--reseller-namez--for-reseller)rg�_get_check_user�_get_action_list)rXr2r2r3rk�szCloudlinuxLimits._get_runc
Csn|jdp|jd}y|j�|�|�id�Wn8tk
rh}z|�t|j|jd��Wdd}~XYnXdS)z7
        Run `disable-reseller-limits` command
        z--reseller-namez
--reseller-idT)r[rrN)	rgrSZdisable_reseller_limitsrbr#rer^�messagerr)rX�res_id�er2r2r3rl�sz)CloudlinuxLimits._disable_reseller_limitsc
Csv|jdp|jdpd}y |j�t|��|�id�Wn8tk
rp}z|�t|j|j	d��Wdd}~XYnXdS)Nz--reseller-namez
--reseller-idz--allT)r[rr)
rgrSZ#_set_container_limits_by_id_or_namer8rbr#rer^ryrr)rXrzr{r2r2r3rm�s

z(CloudlinuxLimits._enable_reseller_limitscCsV|��\}}|dk	r$|dk	r$||fS|j}|d�ry|�|d�}Wn8tk
r~}z|�t|j|jd��Wdd}~XYnXy|j�	|�}Wn:t
jk
r�}z|�t|j|jd��Wdd}~XYnX|j�
|�s�t|�r�|�dd|id��||j|<�nL|d}|�r�t|�}xf|D]^}y|j�	|�}Wn<t
jk
�rn}z|�t|j|jd��Wdd}~XYnX||j|<�qWd|jd<n�y|j��|_Wn:tk
�r�}z|�t|j|jd��Wdd}~XYnXd	}xl|jD]b}y|j�|�d}Wn<t
jk
�r8}z|�t|j|jd��Wdd}~XYnX||j|<�q�Wd}||fS)
z|
        Determines users according to --lve-id/--username/--domain arguments
        Or build all panel users list
        Nz--domain)r[rrz %(username)s is not a panel userrpz--reseller-namerOr�)rsrg�get_user_name_by_domainr.rer^ryrrrR�get_uidr�NoSuchUserExceptionrS�get_package_name_by_user_id�boolrWr%Zget_panel_users_uid_list�_panel_uids_listr-�	get_names)rX�uidrp�or{�
reseller_nameZresellers_users�namer2r2r3rw�sP
((
(((z CloudlinuxLimits._get_check_usercCs|||dd�}|dkrFd|d<d|d<|j�d�}|dk	r<|nd|d<n2|�|d�}|r`||d<|�|�|d<|�|�|S)	a?
        Retrives username, domain and reseller
        for supplied uid/username, for uid==0 returns '-'
        either reseller_name if has --for-reseller
        :param uid: uid
        :param username: username
        :return: dict {"id": uid, "username": username, "domain": domain, "reseller": reseller}
        rP)�idrprqr�domainrpz--for-resellerNrq)rgrd�_get_user_main_domainrt�_fix_single_uid_users)rXr�rp�userruZuser_main_domainr2r2r3�_get_username_domain_resellers	
z.CloudlinuxLimits._get_username_domain_resellercCs$y
|�|�Stk
rdSXdS)zP
        Retrives user's main domain
        :param username: User name
        N)�get_user_domainr.)rXrpr2r2r3r�8s
z&CloudlinuxLimits._get_user_main_domain)r�cCsv|d}|j�|�}t|�dkr$dSxL|D]D}|�|�}|�|�}|dkr*|dkr*||d<||d<||d<dSq*WdS)	a
        Check and fix user info if some users with same uid present. See LU-1816 for details
        :param user: User info. Example:
            {'id': 10001, 'username': 'cltest2', 'reseller': 'admin', 'domain': 'cltest2.com'}
        :return: None
        r�rNzN/ArPr�rqrp)rRr��lenr�rt)rXr�r�Z	usernamesrpZmain_domainrqr2r2r3r�Bs


z&CloudlinuxLimits._fix_single_uid_userscs�i}|j}|j��rd|d<nd|d<|ddkrN|j��rFd|d<nd|d<|j��rbd|d<nd|d<t|dt�r�|d�	d	�nd�t
�fd
d�tD��}g}|ddk�r&|d
dk�r&|ddk�r&y|jj
|d|dd�Wn:tk
�r$}z|�t
|j|jd��Wdd}~XYnXy|��}Wnbtk
�r�}zB|ddk�r�d|d<d|k�r�t
�|d<t|�|dd<d}Wdd}~XYnX�x�t|j�D�]z\}}|�||�}	|d�rH|j���rHy&|j�|	d�}
|
�r�dnd|	d<WnPtk
�rF}z0d|d<d|k�r&t
�|d<t|�|dd<Wdd}~XYnX|j�|�|	d<|ddk	�s�|d
dk	�s�|ddk	�r�d|j_|j�||d�}|ddk�r�|d�r�|j���s�d|d<d|k�r�t
�|d<d|dd<n�|j���s d|d<d|k�rt
�|d<d|dd<n�y"|j�|�\}}
||
d�|d<Wn�tk
�r�}z0d|d<d|k�rrt
�|d<t|�|dd<Wdd}~XYn8tk
�r�}z|j|d<|j|d<Wdd}~XYnXt |d|d |d!|d"g��r|�ry�|d�r|j�!|	d�|	d<|d �r0|j�"|	d�|	d#<|d!�sD|d"�r�|j�#|	d�\}}|d!�r�d$|k�rvt
�|d$<||d$d%<|d"�r�d&|k�r�t
�|d&<||d&d%<WnPtk
�r�}z0d|d<d|k�r�t
�|d<t|�|dd<Wdd}~XYnX|�$||�||	d'<|�%|	��q�Wt&|�|d(<||d)<|d�s�|jj'dk	�r�g}x0t(|jj'�D] }|�$||d'�|�%|��qbW||d*<ng|d*<|�)|d+�d,S)-z3
        Process output for selected users
        �enabledZcageFSZdisabledz--for-resellerN�quotaZmySqlGovz--limitsrCc3s |]}|�p|�kfVqdS)Nr2)�.0�k)�lkr2r3�	<genexpr>tsz4CloudlinuxLimits._get_action_list.<locals>.<genexpr>z--lve-idz
--usernamez--domainz--human-readable-numbersz--reseller-name)rq)r[rr�error�errorsFZcagefsrp�packagerBz'LVE Manager/quota package not installedz#Quotas not activated on this system)rDrEZwarningrrz	mysql-govzmysql-restrictz	mysql-cpuzmysql-ioZmySqlRestrictedr4rAr?r<�items�users�	resellersTr)*rgrTZis_cagefs_presentrUZis_clquota_presentrV�is_governor_presentr]r8rFr^rrSZ
_load_infor#reryrr�can_get_governor_limitsrr	rWr�Zget_user_statusr"r��
_package_data�get_limits_by_user_idZis_clquota_activatedZget_inodes_limits_by_uidrr�anyZget_governor_status_by_usernameZget_restrict_status_by_usernameZget_limits_by_user�_filter_limits�appendr�Z_resellers_datar
rb)rXr[r��keysr�r{Zis_governor_availabler�rpr�Z
cagefs_statusr<Z
soft_limitZ
hard_limitZ	cpu_limitZio_limitZresellers_datarqr2)r�r3rxWs�





 *(



"*






 
"









"

z!CloudlinuxLimits._get_action_listcCsP|j��r6|j��tkrdSdddd�d�}t|��ndddid�}t|��dS)	NTz%(util)s mode is not %(mode)sZGovernorzabusers or single)�util�mode)ryrrz%(util)s not present in systemr�)rVr�Zget_governor_mode�MYSQL_GOV_ENABLED_MODEr)rXZexc_messager2r2r3r��s

z(CloudlinuxLimits.can_get_governor_limitscCs�x*dD]"}||s|�|d�r|�|�qW|dsJ|�dd�rJ|�d�|ds�|�dd�r�|d�dd�r�|d�d�|ds�|�d�|ds�|�dd�r�|d�dd�r�|d�d�|ds�|�d�d	S)
z�
        Remove limits that are stored as key: False in `keys` dict;
        Used for --limits key;
        :type keys: dict[str, bool]
        :type limits: dict[str, str | dict]
        )rJrKrIrLFrNrHrMr4r5r?N)rd�pop)rXr�r<r�r2r2r3r�s

$
$zCloudlinuxLimits._filter_limitscCs |��\}}|��|�||�S)z#
        Run `set` command
        )�_set_check_userrh�_set_action)rXr�rpr2r2r3rjszCloudlinuxLimits._set_runcs����\}}t�fdd�dD��}|dks2|dkrD|sD��ddi�t�fdd�tD��rxt�fdd�tD��sx||fS�jd	s�jd
dk	r�t�jd
�s�t�jd
�s��dd�jd
id
��n$��|�}t|�r��dd|i�||fS)z&
        Find user for modify
        csg|]}�j|�qSr2)rg)r��x)rXr2r3�
<listcomp>*sz4CloudlinuxLimits._set_check_user.<locals>.<listcomp>)z--mysql-unrestrict-allz--reseller-nameNr[z1You must set lve-id or username for modify limitscsg|]}�j|�qSr2)rg)r�r�)rXr2r3r�2scsg|]}�jd�|��qS)z--{})rgr;)r�r�)rXr2r3r�3sz--reseller-namez--for-resellerz.Reseller limits for %(reseller)s are disabled.rq)r[rrzOReseller limits for %s are enabled. Admin can`t set limits for resellers users.)	rsr�rerrrgr*rrt)rXr�rpZopts_without_userr�r2)rXr3r�$s$


z CloudlinuxLimits._set_check_usercCsXtdg�}t|Bt|Bt|Btg�d�|}tt|�|@�dkrPtt|�|@�SdSdS)z�
        Return keys to reset that are only acceptable to this type of limits
        :param list defaults: List of keys to reset
        :param str t: one of "lve", "cl-quota", "dbgov"
        r5)r�lvpzcl-quotaZdbgovrN)rcrrrr��list)rX�defaults�tZall_keyr�r2r2r3�_clean_defaultsDs

z CloudlinuxLimits._clean_defaultscCs@|j}|dp|d}|sdSt|�s<|�tdd|id��dS)z�
        If any reseller is specified in cli options ensures that it exists
        and really a reseller. Will exit with error if not.
        z--reseller-namez--for-resellerNzNo such reseller: %(reseller)srq)r[rr)rgr&rer^)rXr�rqr2r2r3rhVsz!CloudlinuxLimits._verify_resellerc		Cs�|j}d}d}|dr:|ddkr:|�||�\}}}d}n@|ddk	}d|d<|rf|�||�\}}}n|�|||�\}}}|p�dg}t|�r�tdd	�|D�d
�S|dkr�|j��|�|||||||�S)zl
        Process set limits command
        :param uid: User uid
        :param username: User name
        Fz--for-resellerz--lve-idrTz--reseller-nameNcss|]}|r|VqdS)Nr2)r��coder2r2r3r��sz/CloudlinuxLimits._set_action.<locals>.<genexpr>�*)rg�_set_reseller_action�_set_user_actionr��nextrSZapply_all_limits�_make_set_action_response)	rXr�rpr��action_with_reseller_container�set_default_resellers_limits�is_lvectl_error�ret_listr[r2r2r3r�es(

zCloudlinuxLimits._set_actioncs�|jstd�dS|�t��dd��|ds6|drV|sVd|j_d|j_|���ndd}d}	t	t
��xZt|�D]N\}
}|
dd�}
|rp|
tkrpd}	|r�|
t
kr�d}t|�}t|
}|�|�qpW|	�r�|�rTd|j_|r�|j�|d	��nF|�r&|j�|d
�}
|
d}|dk�r|
d}|
d
�n|j�|��dd�����fdd�t��D��|�|�}|�r�||�d�g}|�d|i�n,||dk�r�dn||�d�g}|�d|i�|�|d�dS)NrZr)r\r[z	--defaultz--unlimitedF�Tz--for-resellerz--reseller-namer�r�r<cSst|t�r|�|�n|}|S)N)r]r^r7)�	old_valueZ	new_valuer2r2r3�update_func�s
z?CloudlinuxLimits._make_set_action_response.<locals>.update_funccs4i|],\}}|�kr&��|�|�n�||�qSr2r2)r��keyr=)�
getted_limits�
setted_limitsr�r2r3�
<dictcomp>�sz>CloudlinuxLimits._make_set_action_response.<locals>.<dictcomp>)r�r�r<r�rOrP)r�rprqr<r�)r`�printr7r_rUZ_inode_user_limitsrSr�rxrr^r	rrr8�
OUT_LIMITSZ#get_default_limits_by_reseller_nameZget_limits_by_reseller_namer�rtrb)rXr�r�r�r[r�r�rpZ
is_lve_limitsZ	is_limitsr�r=Z
value_funcZgetted_reseller_datar�r�r�r2)r�r�r�r3r��sj






z*CloudlinuxLimits._make_set_action_responsec
std}g}t�}�d}t�fdd�tD��r�ddi�t��fdd�tD��}��d�|d	<y|j�|||�}	|�|	�Wn8tk
r�}
z|�t|
j	|
j
d
��Wdd}
~
XYnX�d�r�y|j�||�d}Wn:tfk
�r}
zd}t|
j	|
j
d
�}Wdd}
~
XYnX|�r2d
|d<t�|d<||dd<y"|dk�rJ|j�
|�d}d}
Wn:tfk
�r�}
zd}t|
j	|
j
d
�}
Wdd}
~
XYnX|�r�d
|d<d|k�r�t�|d<|
|dd<d}	|�|	��ddk	�r"y4|��dd�}|dk	�r|j�||�d}d}Wn:tfk
�rH}
zd}t|
j	|
j
d
�}Wdd}
~
XYnX|�rnd
|d<t�|d<||dd<�ddk�ry.|��dd�dk	�r�|j�|�d}d}
Wn:tfk
�r�}
zd}t|
j	|
j
d
�}
Wdd}
~
XYnX|�rd
|d<d|k�rt�|d<|
|dd<d}	|�|	��d�r�y8�ddk�rBd}nd}|j�||�d}	|�|	�Wn:tk
�r�}
z|�t|
j	|
j
d
��Wdd}
~
XYnXt�fdd�tD���r�y�|���r��d�r4�ddk}y|j�||�}	|�|	�Wn:tk
�r2}
z|�t|
j	|
j
d
��Wdd}
~
XYnX�d�r��ddk}y|j�||�}	|�|	�Wn:tk
�r�}
z|�t|
j	|
j
d
��Wdd}
~
XYnX�d�ry|j��}	|�|	�Wn:tk
�r�}
z|�t|
j	|
j
d
��Wdd}
~
XYnXt�fdd�tD���r��d�d}}|d k�rN|j�d!��sNd"}d"�d<y,|j�|d#k�rdd$n|||�}	|�|	�Wn:tk
�r�}
z|�t|
j	|
j
d
��Wdd}
~
XYnXWn:tk
�r�}
z|�t|
j	|
j
d
��Wdd}
~
XYnX�d%�rjy0|jj|�d%��dd�d&�d}	|�|	�Wn:tk
�rh}
z|�t|
j	|
j
d
��Wdd}
~
XYnX|||fS)'NFz--for-resellerc3s|]}�d|VqdS)z--%sNr2)r��s)r�r2r3r��sz4CloudlinuxLimits._set_user_action.<locals>.<genexpr>rN�mepc3s6|].}�d|dk	r��||��d|fVqdS)z--%sN)rd)r�r�)�
limits_mapr�r2r3r��sz--save-all-parameterszsave-all-parameters)r[rrz--unlimitedTr��lvectlr�r�rz	--defaultrzcl-quotaz--cagefsr�c3s|]}�d|VqdS)z--%sNr2)r�r�)r�r2r3r�Lsz--mysql-govZwatchedz--mysql-restrictZ
restrictedz--mysql-unrestrict-allc3s|]}�d|VqdS)z--%sNr2)r�r�)r�r2r3r�gsz--mysql-cpuz
--mysql-iorz1.2-17r�rO�defaultz--inodes)�force) r^r�rrdrSZset_lve_limits_by_user_idr�r#reryrrZset_lve_unlimitedrUZ set_user_inodes_limits_unlimitedrr�Zreset_lve_limitsZreset_user_inodes_limitsrTZset_user_statusr"rr�rVZset_governor_status_for_userrZset_restricted_status_for_userZ%set_unrestricted_status_for_all_usersrZ_is_governor_newer_thenZset_limits_for_userZset_user_inodes_limits)rXr�r�rpr�r�r[r�r<�ret_coder{�lvectl_error_dictZis_quota_errorZquota_error_dict�lve_defaultsZnew_user_status�str4r?r2)r�r�r3r��s�
(
"

"



"
"



(

(
(

(,(
(z!CloudlinuxLimits._set_user_actionc
sd}t�}g}t�fdd�tD��r�ddi�t��fdd�tD��}yF�jddk	rj�j��jd|�}n�j��jd	|�}|�|�Wn8tk
r�}z��	t|j
|jd
��Wdd}~XYnX|ddk	�rtyB��|dd�}	|	dk	�r
�j�
|d	|	�}|�|�d}d}
Wn:tfk
�rN}zd
}t|j
|jd
�}
Wdd}~XYnX|�rtd|d<t�|d<|
|dd<|d�ry�j�|d	�d}
Wn:tfk
�r�}zd
}t|j
|jd
�}
Wdd}~XYnX|�r�d|d<t�|d<|
|dd<d}|�|�|||fS)NFc3s|]}�jd|VqdS)z--%sN)rg)r�r�)rXr2r3r��sz8CloudlinuxLimits._set_reseller_action.<locals>.<genexpr>rNr�c3s:|]2}�jd|dk	r��||��jd|fVqdS)z--%sN)rgrd)r�r�)r�rXr2r3r��sz--lve-idz--for-resellerz--reseller-name)r[rrz	--defaultr�Tr�r�r�z--unlimitedr)r^r�rrgrSZset_lvp_defaults_by_reseller_idZset_lvp_limits_by_reseller_idr�r#reryrrr�Zreset_reseller_limitsZset_lvp_unlimited)rXr�r�r�r[r�r<r�r{r�r�r2)r�rXr3r��sV
(

"

"

z%CloudlinuxLimits._set_reseller_actioncCs6tdd�}tdd�|D��|_tdd�|D��|_dS)N)ZcploginrqZdns)Zkeylscss|]}|d|dfVqdS)rrNr2)r��ir2r2r3r��sz/CloudlinuxLimits._init_cache.<locals>.<genexpr>css|]}|d|dfVqdS)rr�Nr2)r�r�r2r2r3r��s)r$r^�_user_to_reseller�_userdomain_cache)rX�infor2r2r3�_init_cache�s
zCloudlinuxLimits._init_cachecCsF|jdkr4y|��Wntk
r2t�|_YnX|j�|d�}|S)zi
        Try to get reseller for given username;
        :type username: str
        :rtype: str
        NrP)r�r�r(r^rd)rXrpr�r2r2r3rt�s
z#CloudlinuxLimits._get_reseller_namecCsB|jdkr4y|��Wntk
r2t�|_YnX|j�|d�S)z~
        Retrive main domain for supplied user
        :param username: User name
        :return: Domain name or N/A
        NzN/A)r�r�r(r^rd)rXrpr2r2r3r��s
z CloudlinuxLimits.get_user_domainc
Cs^yt|�}|r|SWn2ttfk
rF}ztt|���Wdd}~XYnXtdd|id���dS)zn
        Retrive username by domain
        :param domain_name: Domain name
        :return: Username
        NzThere is no domain '%(domain)s'r�)ryrr)r)�IOErrorr(r.r8)rXZdomain_namerpr{r2r2r3r}�sz(CloudlinuxLimits.get_user_name_by_domainc
Cs
|j}d\}}dd�}|ds*|ddkrt|d}|j�|�}t|�}|sht|�rhdd�}|�||��||j|<n�|d�r|d}y|j�|�}Wn:t	j
k
r�}z|�t|j|j
d��Wd	d	}~XYnX|j�|�}|s�t|�r�|�||��||j|<||fS)
a
        User identification from CLI options. Common for all commands.
        May return (None, None) when user wasn't specified in any way and this
        is a *valid* case when we want to list all users with command like:
        "... get --json --for-reseller=reseller1"
        )NNcSsdd|id�S)Nz %(username)s is not a panel userrp)r[rrr2)rpr2r2r3r>�sz.CloudlinuxLimits._check_user.<locals>.<lambda>z--lve-idrcSsdd|id�S)Nz%(uid)s is not a panel userr�)r[rrr2)r�r2r2r3r>sz
--username)r[rrN)rgrSr�r+r�rerWrRr~rrr^ryrr)rXr�r�rpZ_username_messageZuser_packageZ_uid_messager{r2r2r3rs�s,
(
zCloudlinuxLimits._check_userrc
Cs�|jr$|�dt��i�t|d�nXy tt|d�|�di��Wn6tk
rz}ztdt|�|f�Wdd}~XYnXt�	|�dS)z�
        Print error and exit

        :param message dict: Dictionary with keys "result" as string and optional "context" as dict
        r\Tr[rrzError: %s [%s]N)
r`r7r_rr�r8rd�KeyError�sys�exit)rXryZ
error_coder{r2r2r3res &z CloudlinuxLimits._error_and_exit)FrZ)r)(r/r0r1�__doc__rgr`r�rWr�r�rYrbrorfrirkrlrmrwr�r�r^r�rxr�r�rjr�r�rhr�r�r�r�r�rtr�r}rsrer2r2r2r3rQDsL
& :
 (X"9
+rQ)CZ
__future__rrrZ
past.builtinsrr�r_ZclcommonrZclcommon.librrZfuture.utilsr	r
Z	cllicenser�collectionsrZ	lvectllibr
rrZarg_parsersrrrrrrrrrZcllimits.clquota_librrrZutilsrZ	cli_utilsrrZcllimitsr r!r"r#Zclcommon.cpapir$r%r&r'r(r)r*r+Zclcommon.clexceptionr,Zclcommon.cpapi.cpapiexceptionsr-r.r�ZADMIN_RESELLER_NAMESr��objectrQr2r2r2r3�<module>sB,(


Zerion Mini Shell 1.0