Edit File: clquota_lib.cpython-311.opt-1.pyc
� ����5/9e�1�����������������������������d�dl�mZ�d�dlZd�dlmZmZmZ�d�dlmZ�d�dl m Z �d�dlmZm Z �d�dlmZmZ�d�dlZd�dlZ�G�d��d e ������������Z�G�d ��de������������Z�G�d��d e������������Z�G�d��d������������ZdS�)�����)�absolute_importN)�Tuple�Dict�Optional)�exec_utility)�FormattedException)�run_command�ExternalProgramFailed)�is_quota_supported�is_quota_activec�������������������������e�Zd�ZdS�)�ClQuotaExceptionN)�__name__� __module__�__qualname__��������py/cllimits/clquota_lib.pyr���r������s���������������Dr���r���c��������������������$�������e�Zd�ZdZd��fd� Z��xZS�)�UnexpectedClQuotaErrorzU Raised when we get output from cl-quota that cannot be parsed properly. Nc������������������h������dd|d�d�}t����������t����������|����������������������������������|�������������d�S�)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)�superr����__init__)�selfr����broken_exc_message� __class__s��� �r���r���zUnexpectedClQuotaError.__init__ ���sM�������*p��3:�<�)X�)X�Z��Z��� �$�d�+�+�4�4�5G�H�H�H�H�Hr����N�r���r���r����__doc__r���� __classcell__�r"���s���@r���r���r������sQ������������������I��I��I��I��I��I��I��I��I��Ir���r���c��������������������"�������e�Zd�ZdZ��fd�Z��xZS�)�QuotaDisabledExceptionz= Raised when quotas are disabled in system globally. c������������������f������dddid�}t����������t����������|����������������������������������|�������������d�S�)N�%(util)s is disabledr���r���r���)r���r)���r���)r ����disabled_exc_messager"���s��� �r���r���zQuotaDisabledException.__init__,���sA�������+A�,2�G�+<� >�� >�� �$�d�+�+�4�4�5I�J�J�J�J�Jr���r$���r'���s���@r���r)���r)���(���sK������������������K��K��K��K��K��K��K��K��Kr���r)���c��������������������r�����e�Zd�ZdZdZd��Zd��Zd��Zd��Zdd�Z d ��Z d ��Zd��Zd��Z d ��Zd��Zd��Zd��Zd��Zd��ZdS�)� ClQuotaLibz/usr/bin/cl-quotaz/usr/sbin/repquotac������������������>�����d�|�_���������d�|�_��������d�|�_��������d�|�_��������d�S�r#���)�_inode_user_limits�_inode_package_dict�_is_clquota_present�_is_clquota_activated�r ���s��� r���r���zClQuotaLib.__init__6���s,�������IM���IM�� �#'�� �%)��"�"�"r���c������������������\�����|�j����������t����������|�j��������|�j��������������������|�_���������|�j���������S�)zb Get quota presence flag :return: True/False - quotas present/not present )r2���r����_CL_QUOTA_PATH�_REPQUOTA_PATHr4���s��� r����is_clquota_presentzClQuotaLib.is_clquota_present@���s.������ ��#�+�'9�$�:M�t�Ob�'c�'c�D�$��'�'r���c������������������\�����|�j����������t����������|�j��������|�j��������������������|�_���������|�j���������S�)zg Get quota activated flag :return: True/False - quotas activeted/not activeted )r3���r���r6���r7���r4���s��� r����is_clquota_activatedzClQuotaLib.is_clquota_activatedI���s.������ ��%�-�)8��9L�d�Na�)b�)b�D�&��)�)r���c�����������������������|��������������������������������������t����������|������������}||�j��������v�r |�j��������|���������S�|�j��������d���������S�)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_uidR���sK������� �������'�l�l���$�)�)�)��*�3�/�/��&�s�+�+r���Fc������������������6����|��������������������������������������t����������|t����������������������r|dk�����rdd|id�}t����������|�������������|dk����rdgdz��}n�|dk����rdgdz��}n�t ����������|������������t ����������t����������fv�rnRt����������|���������������������d������������������������dk����r|���������������������d������������}nd d |id�}t����������|�������������|D�]Q} �|dk����r#t����������|������������}|dk�����rt��������������������������-#�t����������$�r�d|dd�d�}t����������|�������������w�xY�w|�j ��������d |z��d|d���������z��d|d���������z��g}|r|���������������������d������������� �t����������|�������������dS�#�t����������$�r!}t����������t����������|�������������������������d}~ww�xY�w)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 r���z*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)�limitrE���z--user-id=%d�--soft-limit=%s�--hard-limit=%s����z--forceN)r=���� isinstance�intr����type�tuple�list�len�split� ValueErrorr6����appendr ���r ���r>���)r ���r@���rG����force�exc_message�l�cmd�es��� 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��� 8�� 8��8��I�~�~���F�F���q�5�5�",�,�,�.���!��8��8��8�.v�89�i�.P�.P�#R��#R�K�*�;�7�7�7�8������"���#� �6�!�9�,� �6�!�9�,�.����� "��J�J�y�!�!�!� +���������$�� +�� +�� +�"�3�q�6�6�*�*�*����� +���s$����)C?�?"D!�E-��- F�7F�Fc������������������2�����|�����������������������|d�������������dS�)zq Set unlimited inodes limits for user uid :param: int uid: user id :return: None rC���N�rZ����r ���r@���s��� r���� set_user_inodes_limits_unlimitedz+ClQuotaLib.set_user_inodes_limits_unlimited����s ������� �#�#�C��5�5�5�5�5r���c������������������2�����|�����������������������|d�������������dS�)zo Set default inodes limits for user uid :param: int uid: user id :return: None rE���Nr\���r]���s��� r����reset_user_inodes_limitsz#ClQuotaLib.reset_user_inodes_limits����s ������� �#�#�C��3�3�3�3�3r���c����������������������|�j����������dS�|������������������������������������r|������������������������������������st������������������������� �|����������������������dg������������}n#�t ����������$�r �d|�_�����������w�xY�wt ������������������������|�_���������|�����������������������������������D�]C\��}}t����������|d���������d���������������������t����������|d���������d���������������������f|�j���������|<����Dd|�j���������vr&d|�_���������ddd|�j ��������z��d �d �}t����������|�������������dS�)zF Loads users info from cl-quota :return: None N�--jsonrK���rD���r<���z'There is no %(what)s found in %(where)szdefault settingsz %s output)�what�wherer���) r0���r8���r:���r)����_get_quotasr����dict�itemsrM���r6���)r ����datar@���rG���rV���s��� r���r=���zClQuotaLib._load_users_info����s8�������"�.��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�K�Z^�Zm�Lm�&n�&n�p��p�K�"�;�/�/�/� �.�-s����A��A+c������������������p����t����������|�j��������|������������\��}} �t����������j��������|������������}|st �������������������������n%#�t ����������t����������f$�r�t ����������|��������������w�xY�w|d���������dk����r@t����������|d���������|���������������������di�������������|���������������������d������������d��������������|d���������S�)N)r����result�successr����details)r���r���rl���rg���) r���r6����json�loadsr���� TypeErrorrS���r����get)r ����command�_�s_quota_limitsrh���s��� r���re���zClQuotaLib._get_quotas����s�������(��)<�g�F�F���>� /��:�n�-�-�D���� /�,�.�.�.� /����:�&�� F�� F�� F�(�n�E�E�E�E� F�������>�Y�&�&�"���>��8�8�I�r�2�2��8�8�I�.�.�$��$������ � ��G�}�s ����?��"A!c�����������������������|�������������������������������������r|������������������������������������sdS�t����������|�j��������dg�������������dS�)zV Reset inodes limits for all users to package limits :return: Nz--sync)r8���r:���r���r6���r4���s��� r����reset_inodes_limitszClQuotaLib.reset_inodes_limits����sK������ ��&�&�(�(�� ��0I�0I�0K�0K�� ��F��T�(�8�*�5�5�5�5�5r���c�����������������������|�j����������dS�|������������������������������������r|������������������������������������st������������������������� �|����������������������ddg������������}n#�t ����������$�r �d|�_�����������w�xY�wt ������������������������|�_���������|�����������������������������������D�]^\��}}|d���������d���������}|dk����rd}nt����������|������������}|d���������d���������}|dk����rd}nt����������|������������}||d�|�j���������|<����_dS�) zI Loads packages info from cl-quota :return: None Nrb���z--all-package-limitsrK����-r���rD���)�soft�hard) r1���r8���r:���r)���re���r���rf���rg���rM���)r ����packages�packagerG���� soft_limit� hard_limits��� r����_load_packages_infozClQuotaLib._load_packages_info����s0�������#�/��F��&�&�(�(�� +��0I�0I�0K�0K�� +�(�*�*�*� ��'�'��3I�(J�K�K�H�H���� �� �� �'+�D�$�� �����$(�6�6�� �'�~�~�/�/�� Y�� Y�O�G�V����1��J��S� � �� � � ��_�_� ����1��J��S� � �� � � ��_�_� �9C�Z�0X�0X�D�$�W�-�-� Y�� Ys����A��A,c������������������p�����|��������������������������������������|s|�j��������S�||�j��������v�r||�j��������|���������iS�i�S�)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�� r���c������������������"�����d|||rd|z��ndd�d�S�)Nz3%(what)s set error for package=%(package)s%(error)sz [%s]��)rc���r{����errorr���r���)r ����param�package_name�errs��� r����__set_errorzClQuotaLib.__set_error��s8������P�$)�l�69�%A�W�s�]�]�r�C��C�D��D�� Dr���c����������������������dddid�}|�������������������������������������r|������������������������������������st����������|�������������|���������������������d������������}t ����������|������������dk����rt����������dddid��������������d |z��d |d���������z��d|d ���������z��g}t����������|�j��������|������������\��}}|dk����s|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+���r���r���r���rF���rD���z%(util)s argument errorzcl-quotaz--package=%srI���r���rJ���rK���� Inodes limitsN)r8���r:���r���rR���rQ���r���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_limits ��s������,B�,2�G�+<� >�� >����&�&�(�(�� 9��0I�0I�0K�0K�� 9�"�#7�8�8�8��$�$�S�)�)���v�;�;�!���"�/H�06� �/C�$E��$E��F��F�� F��'��5�)�F�1�I�5�7H�6�RS�9�7T�V��'��(;�\�J�J���&��q�=�=�F�=�"�4�#3�#3�O�\�SY�#Z�#Z�[�[�[���=r���c����������������������ddi}|�������������������������������������r|������������������������������������st����������|�������������t����������|������������dk����rt����������ddi�������������t ����������|������������ddhk����s;t ����������|������������ddhz ��}t����������ddd ���������������������|������������id ��������������d|���g}d|v�r|���������������������d|d�������������������������d|v�r|���������������������d |d�������������������������t����������|�j��������|������������\��}}|dk����s|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 r���zQuota is disabledr���zUnspecified limits for cl-quota�inodes_soft�inodes_hardz-Incorrect limits for cl-quota: %(bad_limits)s� bad_limitsz, r���z --package=z --soft-limit=z --hard-limit=r����N) r8���r:���r���rQ����set�joinrT���r���r6���r����)r ���r����rG���r,���r����r����r����r����s��� r���� set_package_limits_independentlyz+ClQuotaLib.set_package_limits_independently#��s�������!*�+>�?���&�&�(�(�� 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�[�[�[���=r���N)F)r���r���r���r6���r7���r���r8���r:���rA���rZ���r^���r`���r=���re���ru���r~���r����r����r����r����r���r���r���r.���r.���2���s�������������(�N�)�N�*��*��*�(��(��(�*��*��*�,��,��,�.+��.+��.+��.+�`6��6��6�4��4��4�0��0��0�4�����&6��6��6�Y��Y��Y�>����� D��D��D� \��\��\�4\��\��\��\��\r���r.���)� __future__r���rm����typingr���r���r����cllimits.libr����clcommon.clexceptionr����clcommon.utilsr ���r ����cllimits.lib.utilsr���r����cldetectlib�osr���r���r)���r.���r���r���r����<module>r�������s������'��&��&��&��&��&�������(��(��(��(��(��(��(��(��(��(��%��%��%��%��%��%��3��3��3��3��3��3��=��=��=��=��=��=��=��=��B��B��B��B��B��B��B��B���������� � � � � �� �� �� �� �)�� �� �� � I�� I�� I�� I�� I�-�� I�� I�� I�K��K��K��K��K�-��K��K��K�J\��J\��J\��J\��J\��J\��J\��J\��J\��J\r���