ÿØÿàJFIFÿþ ÿÛC       ÿÛC ÿÀÿÄÿÄ"#QrÿÄÿÄ&1!A"2qQaáÿÚ ?Øy,æ/3JæÝ¹È߲؋5êXw²±ÉyˆR”¾I0ó2—PI¾IÌÚiMö¯–þrìN&"KgX:Šíµ•nTJnLK„…@!‰-ý ùúmë;ºgµŒ&ó±hw’¯Õ@”Ü— 9ñ-ë.²1<yà‚¹ïQÐU„ہ?.’¦èûbß±©Ö«Âw*VŒ) `$‰bØÔŸ’ëXÖ-ËTÜíGÚ3ð«g Ÿ§¯—Jx„–’U/ÂÅv_s(Hÿ@TñJÑãõçn­‚!ÈgfbÓc­:él[ðQe 9ÀPLbÃãCµm[5¿ç'ªjglå‡Ûí_§Úõl-;"PkÞÞÁQâ¼_Ñ^¢SŸx?"¸¦ùY騐ÒOÈ q’`~~ÚtËU¹CڒêV  I1Áß_ÿÙ iB^c@`sddlmZddlmZddlmZddlZddlmZddlmZddl m Z dd l m Z d eefd YZ dS( i(tabsolute_import(tprint_function(tdivisionNi(t ClExtSelect(t ClUserSelect(tClSelectExcept(tclprinttClUserExtSelectcB`seZdZdddZddZddZdZdZdZ e dZ d Z d Z d Zd Zd ZeeZdZeeZdZdZRS(s alt_php.initphpcC`s2tj|||d|_g|_g|_dS(N(Rt__init__tNonet_alt_extensionst_user_extensionst _conflicts(tselftitemtexclude_pid_list((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/cluserextselect.pyR s  cC`su|j||dkr/|j|d}n|dkrMtj|nttdt|j||S(s Returns enabled user extensions for a version as a tuple @param user: string @param version: string @return: tuple itnativecS`s |tfS(N(tTrue(ti((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/cluserextselect.pyt(tN( t_check_user_in_cagefsR t get_versionRtUnableToGetExtensionsttupletmaptsortedt_get_enabled_extensions(Rtusertversion((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/cluserextselect.pytlist_enabled_extensionss    cC`s|j||dkr/|j|d}n|dkrMtj|n|j||}|j|}g}xBt|D]4}t}||krt }n|j ||fqWt |S(s Returns as a tuple all user extensions for a version, marking enabled and disabled ones @param user: string @param version: string @return: tuple iRN( RR RRRRt_get_all_extensionsRtFalseRtappendR(RRRtuser_extensionstall_extensionst extensionstexttenabled((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/cluserextselect.pytlist_all_extensions+s     cC`s/t|jdkr(|j||n|jS(s Returns list of enabled user extensions @param user: string @param version: string @return: list i(tlenR t_load_user_extensions(RRR((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/cluserextselect.pyRBscC`s+|jdkr$|j||_n|jS(s Returns list of all extensions for a version @param user: string @param version: string @return: list N(R R t_load_extensions_list(RR((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/cluserextselect.pyR MscC`sO|j|}t|jt|}|rKtjd|d|ndS(si validation extensions name @param ext_list: list @param version: string text_listR$N(R tsett differenceRtNoSuchExtension(RR,RR$tbad_extensions((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/cluserextselect.pyt_check_extensionsXsc`s|j||r,|jd|d|n|j||}|j|}|j|\}}} t| j|} |j| } tj | | } |j | g||D]} | | kr| ^q}gxm|D]e} tt fd|j | g|| }tj | ||}|j|j|qWx(D] } |j|j| | qOW|j|}|j|dj|d||j||j|dS(s Adds extensions to user php.ini @param user: string @param version: string @param ext_list: list @param check_ext: bool @return: None R,Rc`s |kS(N((R(tresolved_dependencies(sI/opt/alt/python27/lib/python2.7/site-packages/clselect/cluserextselect.pyRyRs N(RR1t_compose_user_ini_patht_compose_alt_patht_load_ini_contentstlisttkeyst_check_for_conflictsRtget_conflicts_infot_print_conflicts_infotfiltert_include_dependenciestget_dependencies_listt_print_dependencies_infotextendt _smooth_datat_move_ioncube_extt_write_to_filetjoint_backup_settingst_reload_processes(RRRR,t check_extt user_ini_pathtalt_pathtcontentsR%textensions_datatresulting_extensionstext_datat_conflicts_infoR&tresolvedtdependence_info((R2sI/opt/alt/python27/lib/python2.7/site-packages/clselect/cluserextselect.pytenable_extensionscs6  )    cC`s<|j|||\}}}|j||j||S(s (deprecated) Replaces extensions in user php.ini with supplied ones and print information about dependences and conflicts for old php selector @param user: string @param version: string @param ext_list: list @return: list (t#replace_extensions_with_dependensesR>R:(RRRR,textensions_listtdependencies_listtconflict_dependencies((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/cluserextselect.pytreplace_extensionss   c`s|j|gg}g}|j||}|j|}|j|\}} } i} |j|} tj|| }g|D]} | | kr| ^q} xd| D]\} ttfd|j | g|| } ||j | | |}j | qWx(D] } |j |j | | qW|j |}|j|dj|d||j||j|t| j||fS(s Replaces extensions in user php.ini with supplied ones @param user: string @param version: string @param ext_list: list @return: extensions_list, dependencies_list, conflict_dependencieslist: (list, list, list) c`s |kS(N((R(R2(sI/opt/alt/python27/lib/python2.7/site-packages/clselect/cluserextselect.pyRRs (RR3R4R5R8RR9R6R;R<R=R?R@RARBRCRDRER7(RRRR,RTRSRGRHRIR%RJRLR&RN((R2sI/opt/alt/python27/lib/python2.7/site-packages/clselect/cluserextselect.pyRQs4 %    c C`sn|j||j||}|j|}|j|\}}}xt|D]} | |krkqSnt|jj| g} |j| | |r| jt| rt j didd6d| fd6qSn|j | dqSWx:|D]2} | |krqn|j |j|| qW|j|dj|d||j||j|dS(s Removes extensions from user php.ini @param user: string @param version: string @param ext_list: list @return: None ttexttWARNtstatuss%s left as dependencytmessages N(RR3R4R5R-R7R.t_is_dependencytissubsetRt print_diagtpopR R?R@RBRCRDRE( RRRR,RGRHRIR%RJRt rest_of_setR&((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/cluserextselect.pytdisable_extensionss4      cC`s=|stjdntj||}|j|||S(s Replaces extensions in user php.ini with default ones @param user: string @param version: string @return: list tVersion(Rt EmptyParamRRRU(RRRR,((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/cluserextselect.pytreset_extensionsscC`st}g}g}xt|D]l}|jdrGt}|j|qn|rx|jdret}qx|j|qn|j|qW|j||S(s PHP ioncube extensions must be at the beginning of extensions list @param contents: list @return: list s ;---ioncubes;---(R!t startswithRR"R?(RItfoundtfixed_contentststripped_contentsR((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/cluserextselect.pyRAs      c C`sg}g}i}t}t}yjt|d}xJ|D]B}|j}|jdrnt}|j|q7|jdr|jd}|dkrq7n|} t}| |kry|g|| ===s;---s;- Rt;s;<===( R!topentrstripRcRR"tstriptclosetOSErrortIOError( tpathRIR%RJt is_contentt is_extensiontinitlinet tmp_ext_nametext_name((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/cluserextselect.pyR5sJ         cC`s5|j||}|j|}|jj|dS(s Loads user alternative extensions list for a version @param user: string @param version: string N(R3t_skim_over_extensionsR R?(RRRRGR%((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/cluserextselect.pyR*@sc C`s|jrA|jj|}d|jdd}|d|dSt|jj|}tjj|j |d|dd|j fd |j |jddf|j S( s Composes user ini file path @param user: string @param version: string @return: string sphp%st.Rs/.cl.selector/alt_s.iniitetcscl.%s.dsalt-%s%s( twithout_cagefst_clpwdt get_homedirtreplacetstrtget_uidtosRoRCt CAGEFS_PATHt_itemtUSER_INI(RRRthomedirtphp_dirtuid((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/cluserextselect.pyR3Js   N(t__name__t __module__RR R RR(RR R1R!RPRURQR_RbRAt staticmethodR5R*R3(((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/cluserextselect.pyRs$   %  $ $   8  (t __future__RRRRt clextselectRt cluserselectRtclselectexceptRt clselectprintRR(((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/cluserextselect.pyts