§ Rl¾jD1ãóÈ—ddlZddlmZmZmZddlmZddlmZm Z ddl m Z ddl 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 „Z d „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|¦«\}}|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_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 r r rr)r.rrrú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