-H^ddlmZddlZddlZddlZddlZddlmZmZm Z ddl m Z ddl m ZddlmZddlmZddlmZmZmZmZd ed ed ed dfd Zdeee eeffd ed efdZded dfdZded dfdZdedeed efdZdeed dfdZ defdZ!dedeefdZ"dS))absolute_importN)DictSetUnion) WposError)php_info)ALL_OPTIMIZATION_FEATURES) UserConfig)WposUseris_run_under_userrun_in_cagefs_if_neededExtendedJSONEncoderdomainwp_pathmodulereturncnddd|d|d|g}t|}tjd|dS)zG Disable optimization feature for specified domain and wp_path /usr/bin/clwpos-userdisablez --domain=z --wp-path=z --feature=zCLWPOS-USER DISABLE --> %sN)r loggingdebug)rrr disable_cmdresults +py/clwpos/hooks/lib/user_disable_caching.pydisable_modulersX*96J&6J6J)))+@+@+@BK $[ 1 1F M.77777wordpress_infoc|di|i}|dd}|dg}|otd|DS)zE Check for module's incompatibility issues for specified wp. featuresenabledFissuesc3.K|]}|ddkVdS)typeincompatibilityN).0issues r z.check_has_incompatibilities..*s,UUUeFm/@@UUUUUUr)getany)rr module_info is_enabledr!s rcheck_has_incompatibilitiesr-"sq !$$Z4488DDKE22J __Xr * *F  U#UUfUUUUUUruserctstdtjd}tj|jr|dSt}|j |}t|d5}tj ||tddddS#1swxYwYdS)zs Create .php_info- file user's .clwpos directory and write data about user's php versions into it. *Internal Error. Contact CloudLinux supportCLWPOS_PHP_FILE_IDNfile_idw)cls)r rosenvironr)pathisdirwpos_dir get_php_inforformatopenjsondumpr)r._pidr file_pathfs rcreate_php_info_filerC-s   FDEEE :>>. / /D 7== ' '4<~~H $$T$22I i  8 (A#67777888888888888888888sCC C ctstdtjd}|j|}tj|rtj |dSdS)zP Remove .php_info- file from user's .clwpos directory if it exists. r0r1r2N) r rr6r7r)rr<r8isfileunlink)r.r@rAs rremove_php_info_filerG=s   FDEEE :>>. / /D $$T$22I w~~i   )rdocroots_affectedc*tj|jsdSt |jD]E\}}}tj|j|}| d|vrdSFdS)z Check if any WPOS optimization feature is enabled on docroots that are affected by php version or handler change. F/T) r6r8existsr:r nameenabled_modulesjoinhome_dirrstrip)r.rHdocroot_abs_docroot_paths r%is_docroot_with_wpos_enabled_affectedrTIs 7>>$- ( (u#DI..>>@@ A7<< w??  " "3 ' '+< < <44 = 5rdomains_affectedcddg}t|}tjd|tj|jdgD]}|d}tfd|Dr_|d}tj |dtDD]2\}}t||rt|d |d |3d S) z Call clwpos-user get command to obtain WPOS data about user's sites. If site has incompatibilities, disable object caching on it. rr)zCLWPOS-USER GET --> %sdocrootsdomainsc3 K|]}|vV dS)Nr%)r&rrUs rr(z=check_domains_wpos_info_and_disable_module..ds)HHfv))HHHHHHrwpsc6g|]}|Sr%)to_interface_name)r&features r z>check_domains_wpos_info_and_disable_module..gs;=c=c=c=D>E=V=V=X=X=c=c=crrr8N) r rrr>loadsstdoutr)r* itertoolsproductr r-r)rUget_cmdr docroot_infodocroot_domains wordpressesrrs` r*check_domains_wpos_info_and_disable_modulergYs &u-G $W - -F M*F333 6=1155j"EEWW &y1 HHHHHHH H H W&u-K*3*;K=c=cHa=c=c=c+d+d W W&/~vFFW"?1#5~f7MvVVVWWrc$t|dS)zX Create file with data about domains' php versions in user's .clwpos directory. N)rC)r.s r _run_pre_hookrimsrcBt|t|dS)zX Check incompatibilies for user's domains and disable object caching if needed. N)rgrG)r.rUs r_run_post_hookrkts'//?@@@r)# __future__rrar>rr6typingrrrclwpos.cl_wpos_exceptionsrclwpos.data_collector_utilsrr;clwpos.optimization_featuresr clwpos.user.configr clwpos.utilsr r r rstrrdictboolr-rCrGrTrgrirkr%rrrvs*'&&&&&  ##########//////@@@@@@BBBBBB))))))bbbbbbbbbbbb8388c8d8888VS%T "223V=@VEIVVVV 8x 8D 8 8 8 8 x D      SQTX Z^     WSWdWWWW(SXr