?HgD1ddlZddlmZmZmZddlmZddlmZm Z ddl m Z ddl m Z mZGddeZGd d eZGd d eZGd dZdS)N)DictOptionalTuple)FormattedException)ExternalProgramFailed run_command) exec_utility)is_quota_activeis_quota_supportedceZdZdS)ClQuotaExceptionN)__name__ __module__ __qualname__I/opt/cloudlinux/venv/lib/python3.11/site-packages/cllimits/clquota_lib.pyr r sDrr c$eZdZdZdfd ZxZS)UnexpectedClQuotaErrorzU Raised when we get output from cl-quota that cannot be parsed properly. NcZdd|dd}t|dS)NzUnexpected 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_responsemessagecontextsuper__init__)selfrbroken_exc_message __class__s rrzUnexpectedClQuotaError.__init__sF*p3:<)X)XZZ +,,,,,rNrrr__doc__r __classcell__r"s@rrrsG----------rrc"eZdZdZfdZxZS)QuotaDisabledExceptionz= Raised when quotas are disabled in system globally. cXdddid}t|dS)N%(util)s is disabledrrrr)r disabled_exc_messager"s rrzQuotaDisabledException.__init__(s:+A,2G+< > > -.....rr$r's@rr)r)$sB/////////rr)creZdZdZdZdZdZdZdZddZ d Z d Z d Z d Z d ZdZdZdZdZdZdS) ClQuotaLibz/usr/bin/cl-quotaz/usr/sbin/repquotac>d|_d|_d|_d|_dSr#)_inode_user_limits_inode_package_dict_is_clquota_present_is_clquota_activatedr s rrzClQuotaLib.__init__2s,IMIM #' %)"""rc\|jt|j|j|_|jS)zb Get quota presence flag :return: True/False - quotas present/not present )r2r _CL_QUOTA_PATH_REPQUOTA_PATHr4s ris_clquota_presentzClQuotaLib.is_clquota_present<s.  # +'9$:MtOb'c'cD $''rc\|jt|j|j|_|jS)zg Get quota activated flag :return: True/False - quotas activeted/not activeted )r3r r6r7r4s ris_clquota_activatedzClQuotaLib.is_clquota_activatedEs.  % -)89LdNa)b)bD &))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_infostrr0)r user_iduids rget_inodes_limits_by_uidz#ClQuotaLib.get_inodes_limits_by_uidNsK 'll $) ) )*3/ /&s++rFcB|t|tr|dkrdd|id}t||dkrdgdz}n|dkrdgdz}nt |t t fvrnRt|ddkr|d}nd d |id}t||D]V} |dkr#t|}|dkrt-#t$r}d |dd d}t||d }~wwxYw|j d|d|dd|dg}|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 unlimiteddefault,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= isinstanceintr typetuplelistlensplit ValueErrorr6appendrrr>)r r@rGforce exc_messagerHecmds rset_user_inodes_limitsz!ClQuotaLib.set_user_inodes_limits[s #s## 0sQww&R',cl44K";// / [ !]Q&FF y [1_FFF||t},,V\\#&&''1,,c***P+3V*<>> &{333 ? ?? )) #E  199",,,.!???.v8=).T.T#V#VK*;77Q>?"!C!!*vay***vay**,  " JJy ! ! ! 2      $ 2 2 2"3q66** 1 2s0)C?? D& D!!D&!E22 F<FFc2||ddS)zq Set unlimited inodes limits for user uid :param: int uid: user id :return: None rCNrYr r@s r set_user_inodes_limits_unlimitedz+ClQuotaLib.set_user_inodes_limits_unlimiteds ##C55555rc2||ddS)zo Set default inodes limits for user uid :param: int uid: user id :return: None rENr[r\s rreset_user_inodes_limitsz#ClQuotaLib.reset_user_inodes_limitss ##C33333rc|jdS|r|st |dg}n#t $r d|_wxYwi|_|D]C\}}t|ddt|ddf|j|<Dd|jvr&d|_dd|jdd 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)whatwherer) r0r8r:r) _get_quotasr itemsrMr6)r datar@rGrVs rr=zClQuotaLib._load_users_infos7  " . F&&(( +0I0I0K0K +(** * ##XJ//DD   &*D #  #%::<< R RKC,/q ! ,=,=s6!9Q M:n--DD:& M M M(nEEE1 L M +(** * >Y & &">88Ir2288I..$$  G}s/AAAc|r|sdSt|jdgdS)zV Reset inodes limits for all users to package limits :return: Nz--sync)r8r:r r6r4s rreset_inodes_limitszClQuotaLib.reset_inodes_limitssK &&(( 0I0I0K0K  FT(8*55555rc|jdS|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)softhard)r1r8r:r)rdr rerM)r packagespackagerG soft_limit hard_limits r_load_packages_infozClQuotaLib._load_packages_infos,  # / F&&(( +0I0I0K0K +(** * ''3I(JKKHH   '+D $  $& '~~// Y YOGV1JS    __ 1JS    __ 9CZ0X0XD $W - - Y Ys AA,cp||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 rget_reseller_package_limitsz&ClQuotaLib.get_reseller_package_limitssN   """ ,+ + t7 7 7$d&>?O&PQ Q rc$d|||rd|dndddS)Nz3%(what)s set error for package=%(package)s%(error)sz [])rbryerrorrr)r param package_nameerrs r __set_errorzClQuotaLib.__set_errors<P$)l47%?[#[[[[RAABB Brcdddid}|r|st||d}t |dkrtdddidd |d |d d |d g}t |j|\}}|d ks|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_cmdret_codestdouts rset_reseller_package_limitsz&ClQuotaLib.set_reseller_package_limitss%,B,2G+< > >&&(( 90I0I0K0K 9"#788 8$$S)) v;;!  "/H06 /C$E$EFF F4\333q 333q 335 ((;\JJ& q==F="4#3#3O\SY#Z#Z[[ [ =rcddi}|r|st|t|dkrtddit |ddhks;t |ddhz }tddd |id d |g}d|vr|d |dd|vr|d |dt|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, rrrIrJrN) r8r:r rQsetjoinrTr r6r)r rrGr,rrrrs r set_package_limits_independentlyz+ClQuotaLib.set_package_limits_independentlys!*+>?&&(( 90I0I0K0K 9"#788 8 v;;!  "I/P#QRR R6{{}m<<<V }'EEJ"/^0S>S/T$V$VWW W3\334 F " "    G}0E G G H H H F " "    G}0E G G H H H'(;\JJ& q==F="4#3#3O\SY#Z#Z[[ [ =rN)F)rrrr6r7rr8r:rArYr]r_r=rdrsr|rrrrrrrr.r..s(N)N***(((*** , , ,.2.2.2.2`6664440004$666YYY> BBB \\\6\\\\\rr.)rktypingrrrclcommon.clexceptionrclcommon.utilsrr cllimits.libr cllimits.lib.utilsr r r rr)r.rrrrsI ((((((((((333333========%%%%%%BBBBBBBB     )    - - - - -- - - -/////-///J\J\J\J\J\J\J\J\J\J\r