Your IP : 3.15.233.123


Current Path : /opt/cloudlinux/venv/lib/python3.11/site-packages/cllimits/__pycache__/
Upload File :
Current File : //opt/cloudlinux/venv/lib/python3.11/site-packages/cllimits/__pycache__/clquota_lib.cpython-311.pyc

�

T�gD1����ddlZddlmZmZmZddlmZddlmZm	Z	ddl
mZddlm
Z
mZGd�de��ZGd	�d
e��ZGd�de��ZGd
�d��ZdS)�N)�Dict�Optional�Tuple)�FormattedException)�ExternalProgramFailed�run_command)�exec_utility)�is_quota_active�is_quota_supportedc��eZdZdS)�ClQuotaExceptionN)�__name__�
__module__�__qualname__���K/opt/cloudlinux/venv/lib64/python3.11/site-packages/cllimits/clquota_lib.pyr
r
s�������Drr
c�$��eZdZdZd�fd�	Z�xZS)�UnexpectedClQuotaErrorzU
    Raised when we get output from cl-quota
    that cannot be parsed properly.
    Nc�Z��dd|d�d�}t���|��dS)Nz�Unexpected response got from %(util)s. Raw response from cl-quota: '%(raw_response)s'.Please, contact CloudLinux support for help in resolving this issue.�Quota)�util�raw_response��message�context��super�__init__)�selfr�broken_exc_message�	__class__s   �rrzUnexpectedClQuotaError.__init__sF���*p�3:�<�)X�)X�Z�Z��	�����+�,�,�,�,�,r�N�rrr�__doc__r�
__classcell__�r"s@rrrsG���������-�-�-�-�-�-�-�-�-�-rrc�"��eZdZdZ�fd�Z�xZS)�QuotaDisabledExceptionz=
    Raised when quotas are disabled in system globally.
    c�X��dddid�}t���|��dS)N�%(util)s is disabledrrrr)r �disabled_exc_messager"s  �rrzQuotaDisabledException.__init__(s:���+A�,2�G�+<� >� >��
�����-�.�.�.�.�.rr$r's@rr)r)$sB���������/�/�/�/�/�/�/�/�/rr)c�r�eZdZdZdZd�Zd�Zd�Zd�Zdd�Z	d	�Z
d
�Zd�Zd�Z
d
�Zd�Zd�Zd�Zd�Zd�ZdS)�
ClQuotaLibz/usr/bin/cl-quotaz/usr/sbin/repquotac�>�d|_d|_d|_d|_dSr#)�_inode_user_limits�_inode_package_dict�_is_clquota_present�_is_clquota_activated�r s rrzClQuotaLib.__init__2s,��IM���IM�� �#'�� �%)��"�"�"rc�\�|j�t|j|j��|_|jS)zb
        Get quota presence flag
        :return: True/False - quotas present/not present
        )r2r�_CL_QUOTA_PATH�_REPQUOTA_PATHr4s r�is_clquota_presentzClQuotaLib.is_clquota_present<s.��
�#�+�'9�$�:M�t�Ob�'c�'c�D�$��'�'rc�\�|j�t|j|j��|_|jS)zg
        Get quota activated flag
        :return: True/False - quotas activeted/not activeted
        )r3r
r6r7r4s r�is_clquota_activatedzClQuotaLib.is_clquota_activatedEs.��
�%�-�)8��9L�d�Na�)b�)b�D�&��)�)rc��|���t|��}||jvr
|j|S|jdS)z�
        Retrive inodes limits by uid
        :param user_id: Supplied uid
        :return: cortege (soft_limit, hard_limit). (None, None) if governor not present or error
        �0)�_load_users_info�strr0)r �user_id�uids   r�get_inodes_limits_by_uidz#ClQuotaLib.get_inodes_limits_by_uidNsK��	
�������'�l�l���$�)�)�)��*�3�/�/��&�s�+�+rFc�B�|���t|t��r|dkrdd|id�}t|���|dkrdgdz}n�|dkrdgdz}n�t	|��t
tfvrnRt|�d����dkr|�d��}nd	d
|id�}t|���|D]V}	|dkr#t|��}|dkrt����-#t$r}d|dd�d�}t|��|�d
}~wwxYw|j
d|��d|d��d|d��g}|r|�d��	t|��d
S#t$r"}tt|����|�d
}~wwxYw)z�
        Set inodes limits for user uid
        :param: int uid: user id
        :param: list limits: new inodes limits
        :param: bool force: save limits if even they are equal to defaults
        :return: None
        rz*User id '%(uid)s' isn't a positive integerr@r�	unlimited��default�,z$Limits %(limits)s aren't acceptable.�limitszFLimit value '%(limit)s' isn't a positive integer or string %(default)s)�limitrENz
--user-id=�
--soft-limit=�
--hard-limit=�z--force)r=�
isinstance�intr
�type�tuple�list�len�split�
ValueErrorr6�appendrrr>)r r@rG�force�exc_messagerH�e�cmds        r�set_user_inodes_limitsz!ClQuotaLib.set_user_inodes_limits[s��	
�������#�s�#�#�	0�s�Q�w�w�&R�',�c�l�4�4�K�"�;�/�/�/��[� � �!�]�Q�&�F�F�
�y�
 �
 ��[�1�_�F�F��F�|�|��t�}�,�,���V�\�\�#�&�&�'�'�1�,�,����c�*�*���*P�+3�V�*<�>�>��&�{�3�3�3��	
?�	
?��?��	�)�)� #�E�
�
�� �1�9�9�",�,�,�.���!�?�?�?�.v�8=�)�.T�.T�#V�#V�K�*�;�7�7�Q�>�����?�����"�!�C�!�!�*�v�a�y�*�*�*�v�a�y�*�*�,���	"��J�J�y�!�!�!�	2���������$�	2�	2�	2�"�3�q�6�6�*�*��1�����	2���s0�)C?�?
D&�	D!�!D&�!E2�2
F�<F�Fc�2�|�|d��dS)zq
        Set unlimited inodes limits for user uid
        :param: int uid: user id
        :return: None
        rCN�rY�r r@s  r� set_user_inodes_limits_unlimitedz+ClQuotaLib.set_user_inodes_limits_unlimited�s ��	
�#�#�C��5�5�5�5�5rc�2�|�|d��dS)zo
        Set default inodes limits for user uid
        :param: int uid: user id
        :return: None
        rENr[r\s  r�reset_user_inodes_limitsz#ClQuotaLib.reset_user_inodes_limits�s ��	
�#�#�C��3�3�3�3�3rc��|j�dS|���r|���st���	|�dg��}n#t
$r	d|_�wxYwi|_|���D]C\}}t|dd��t|dd��f|j|<�Dd|jvr&d|_dd|j�d�d	�d
�}t|���dS)zF
        Loads users info from cl-quota
        :return: None
        N�--jsonrKrDr<z'There is no %(what)s found in %(where)szdefault settingsz output)�what�wherer)	r0r8r:r)�_get_quotasr
�itemsrMr6)r �datar@rGrVs     rr=zClQuotaLib._load_users_info�s7���"�.��F��&�&�(�(�	+��0I�0I�0K�0K�	+�(�*�*�*�	��#�#�X�J�/�/�D�D���	�	�	�&*�D�#��	����#%����:�:�<�<�	R�	R�K�C��,/��q�	�!��,=�,=�s�6�!�9�Q�<�?P�?P�+Q�D�#�C�(�(��d�-�-�-�&*�D�#�&O�/A�t�Ob�Lk�Lk�Lk�&l�&l�n�n�K�"�;�/�/�/�	.�-s�A�A+c�z�t|j|��\}}	tj|��}n*#tt
f$r}t
|���|�d}~wwxYw|st
���|ddkr@t|d|�di��|�d��d����|dS)N)r�result�successr�details)rrrjre)	r	r6�json�loads�	TypeErrorrSrr
�get)r �command�_�s_quota_limitsrfrWs      rrdzClQuotaLib._get_quotas�s���(��)<�g�F�F���>�	M��:�n�-�-�D�D���:�&�	M�	M�	M�(�n�E�E�E�1�L�����	M�����	+�(�*�*�*���>�Y�&�&�"���>��8�8�I�r�2�2��8�8�I�.�.�$�$���
�
�G�}�s�/�A�A�Ac��|���r|���sdSt|jdg��dS)zV
        Reset inodes limits for all users to package limits
        :return:
        Nz--sync)r8r:r	r6r4s r�reset_inodes_limitszClQuotaLib.reset_inodes_limits�sK��
�&�&�(�(�	��0I�0I�0K�0K�	��F��T�(�8�*�5�5�5�5�5rc���|j�dS|���r|���st���	|�ddg��}n#t
$r	d|_�wxYwi|_|���D]^\}}|dd}|dkrd}nt|��}|dd}|dkrd}nt|��}||d�|j|<�_dS)	zI
        Loads packages info from cl-quota
        :return: None
        Nraz--all-package-limitsrK�-rrD)�soft�hard)r1r8r:r)rdr
rerM)r �packages�packagerG�
soft_limit�
hard_limits      r�_load_packages_infozClQuotaLib._load_packages_info�s,���#�/��F��&�&�(�(�	+��0I�0I�0K�0K�	+�(�*�*�*�	��'�'��3I�(J�K�K�H�H���	�	�	�'+�D�$��	����$&�� �'�~�~�/�/�	Y�	Y�O�G�V����1��J��S� � ��
�
� ��_�_�
����1��J��S� � ��
�
� ��_�_�
�9C�Z�0X�0X�D�$�W�-�-�	Y�	Ys�A�A,c�p�|���|s|jS||jvr||j|iSiS)aY
        Get inodes limits for supplied reseller and package
        :param package_name_arg: Package name. Only if reseller name is provided. If None - all packages
        :return: Packages limits dictionary: {package_name: { "soft": 100000, "hard": 200000 } }
        If package with supplied name not found, dictionary will be empty
        )r|r1)r �package_name_args  r�get_reseller_package_limitsz&ClQuotaLib.get_reseller_package_limits�sN��	
� � �"�"�"��	,��+�+��t�7�7�7�$�d�&>�?O�&P�Q�Q��	rc�$�d|||rd|�d�ndd�d�S)Nz3%(what)s set error for package=%(package)s%(error)sz [�]�)rbry�errorrr)r �param�package_name�errs    r�__set_errorzClQuotaLib.__set_error�s<��P�$)�l�47�%?�[�#�[�[�[�[�R�A�A�B�B�	Brc��dddid�}|���r|���st|���|�d��}t	|��dkrtdddid����d	|��d
|d��d|d
��g}t|j|��\}}|dks|r$t|�d||�����dS)z�
        Set inodes limits for package
        Called from cloudlinux-packages set
        :param package_name: Package name
        :param limits_to_set: Limits to set: soft_limit,hard_limit
        :return: None
        r+rrrrFrDz%(util)s argument errorzcl-quota�
--package=rIrrJrK�
Inodes limitsN)r8r:r
rRrQr	r6�_ClQuotaLib__set_error)r r��
limits_to_setr,rG�cl_quota_cmd�ret_code�stdouts        r�set_reseller_package_limitsz&ClQuotaLib.set_reseller_package_limitss%��,B�,2�G�+<� >� >���&�&�(�(�	9��0I�0I�0K�0K�	9�"�#7�8�8�8��$�$�S�)�)���v�;�;�!���"�/H�06�
�/C�$E�$E�F�F�
F�4�\�3�3�3��q�	�3�3�3��q�	�3�3�5��(��(;�\�J�J���&��q�=�=�F�=�"�4�#3�#3�O�\�SY�#Z�#Z�[�[�[��=rc��ddi}|���r|���st|���t|��dkrtddi���t	|��ddhks;t	|��ddhz
}tddd	�|��id
����d|��g}d|vr|�d|d����d|vr|�d
|d����t|j|��\}}|dks|r$t|�	d||�����dS)z�
        Set inodes limits for package
        Called from cl-syncpkgs
        :param package_name: Package name
        :param limits: Limits to set: {"inodes_soft":1000, "inodes_hard":2000}
        :return: None
        rzQuota is disabledrzUnspecified limits for cl-quota�inodes_soft�inodes_hardz-Incorrect limits for cl-quota: %(bad_limits)s�
bad_limitsz, rr�rIrJr�N)
r8r:r
rQ�set�joinrTr	r6r�)r r�rGr,r�r�r�r�s        r� set_package_limits_independentlyz+ClQuotaLib.set_package_limits_independentlys���!*�+>�?���&�&�(�(�	9��0I�0I�0K�0K�	9�"�#7�8�8�8��v�;�;�!���"�I�/P�#Q�R�R�R��6�{�{�}�m�<�<�<��V���
�}�'E�E�J�"�/^�0<�d�i�i�
�>S�>S�/T�$V�$V�W�W�
W�3�\�3�3�4���F�"�"���� G��}�0E� G� G�H�H�H��F�"�"���� G��}�0E� G� G�H�H�H�'��(;�\�J�J���&��q�=�=�F�=�"�4�#3�#3�O�\�SY�#Z�#Z�[�[�[��=rN)F)rrrr6r7rr8r:rArYr]r_r=rdrsr|rr�r�r�rrrr.r..s������(�N�)�N�*�*�*�(�(�(�*�*�*�,�,�,�.2�.2�.2�.2�`6�6�6�4�4�4�0�0�0�4���$6�6�6�Y�Y�Y�>��� B�B�B�
\�\�\�6\�\�\�\�\rr.)rk�typingrrr�clcommon.clexceptionr�clcommon.utilsrr�cllimits.libr	�cllimits.lib.utilsr
rr
rr)r.rrr�<module>r�sI������(�(�(�(�(�(�(�(�(�(�3�3�3�3�3�3�=�=�=�=�=�=�=�=�%�%�%�%�%�%�B�B�B�B�B�B�B�B�	�	�	�	�	�)�	�	�	�
-�
-�
-�
-�
-�-�
-�
-�
-�/�/�/�/�/�-�/�/�/�J\�J\�J\�J\�J\�J\�J\�J\�J\�J\r

?>