MiddlmZddlmZddlmZddlZddlZddlZddlZddlm Z ddl m Z ddl m Z dZd Zd Zejd Zejd Zd ZdZGddeZddZdZdS))print_function)division)absolute_importN)clcagefs)ClSelectExcept)run_process_in_cagefsz/opt/altpythonz??z(?P\d\.?\d+)$z"(^|.*/)python(?P\d\.\d+)$z/usr/share/l.v.e-manager/utilspython_wrappercDeZdZ ddZdZedZdZddZdS) InterpreterNc $ t|_||_|r8|r6||_||_|j|j||_n`|rd|_||_tjt|j}| d}d|vr|dd|dd}||_ tj |jdd}|||ddz||zg} | D]} || r!| |_|j| || r| }| dz} || r!| |_|j| |js4t%jdtj |z|s|j}||_n|r||_|g|_tj tj tj |tj j|_||_nQt/dd } | j|_| j|_| j|_| j|_| j|_|r||_nd|_|r ||_ns |jrzt5jsg|j} t9| |jd d g}|d dkrt;d |d|dd|_n=t=j|jd d gd}|d|_n#t:t@t<j!f$r}tD#|j}|r"| d|_d|_nG|j r|j |_d|_n,t%jd|jdtI|Yd}~nd}~wwxYw|jsC|jr>d|jddd|_dSdSdS)Nversion.rbinr _binz-Can not find python binary in directory: "%s"z2.7z-czimport sys; print(sys.version) returncodezUnable to get python version %soutputT)textz$Error detect python binary version "z"; )%list binary_listuserprefixbinaryappend python_binresearchDIGITS_VERSION_PATTERNgroupversion_from_suffixospathjoinsplit _is_real_file_is_link_to_wrapperrInterpreterErrordirnameabspathpardir interpretersr version_fullr in_cagefsrOSError subprocess check_output IndexErrorCalledProcessErrorVERSION_PATTERNmatchstr)selfrrrr. target_userr6suffixpython_realbinbinaries_to_checkbin_file real_binary interpreterrresult version_rawever_s _/opt/cloudlinux/venv/lib64/python3.11/site-packages/clselect/clselectpythonuser/interpreters.py__init__zInterpreter.__init__!s66 8 1f8 1 DK DK   # #DK 0 0 0$DOO 3 1"DO DKI4dkBBE[[++F&  "1I44qrr 44'-D $W\\$+uhGGNc!2!21!55'!  . 9 9%%h//6&.DO$++H555++H55&%F&/ %%k229&1DO$++K888 ? g$5CbgooVdFeFeeggg ) DKK  1 DK &xD '//"',,''+9+9::DK$DOO&y11%8K%,DK%,DK&.DL + 8D )0DO  "DLLDL  _ ,D   _9 ?X%7%9%9 ?9D2448:Z3[]]Fl+q00%&GPXIYZZZ(.x(8(>(>(@(@(CD%%#-"9$0PQX\#^#^#^K(3(9(9(;(;A(>D%Z)FG _ _ _&,,T[99_#'::i#8#8DL(,D%%-_#'#;DL(,D%%(99IMVYZ[V\V\V\]___ _| F 1 F88D$5$;$;C$@$@!$DEEDLLL F F F FsB>NQ-B P<<Qctj|oFtj| p&tj|dS)z/Check that given path is a file and not symlinkz/opt/alt/python)r#r$isfileislinkreadlink startswith)r8r$s rDr'zInterpreter._is_real_filesKw~~d##uRW^^D-A-A)A)tR[QUEVEVEaEabsEtEtuctjtt}tj|rtj||kStj|S)z Since we have python wrapper, all python files are symlinks now So real binary - path which must be written to .htaccess is considered symlink that links to python wrapper )r#r$r% WRAPPERS_PATHPYTHON_WRAPPERrHrIrG)r$ wrapper_paths rDr(zInterpreter._is_link_to_wrappersXw||M>BB 7>>$   5;t$$ 4 4w~~d###rKc z|jjd|jjd|jd|jd|jd|jd S)Nrz (prefix='z ', version='z ', binary='z', version_full='z')) __class__ __module____name__rrrr.)r8s rD__repr__zInterpreter.__repr__sM)))4>+B+B+B T\\\4;;;8I8I8I  rKcj|j|j|j|jd}|r||=t |||iS|S)N)rrrr.)rrrr.getattr)r8keyis rDas_dictzInterpreter.as_dictsNkk| -     +#D#&&* *rK)NNNNNN) rSrR __qualname__rEr' staticmethodr(rTrYrKrDr r s9=04`F`F`F`FDvvv $ $\ $      rKr ctjtt}d}g}t j||dzt j||dzzD]D} t |}n#tj$rY$wxYw|j | |Ertfd|DS|S)Nz[0-9]rc3<K|]}t||fVdSrZ)rV.0rXrWs rD zinterpreters..s0::QWQ__a(::::::rK) r#r$r%ALT_PATHINT_BASEglobr rr)r.rdict)rW search_pathdigitinterpsr$r?s` rDr-r-s',,x22K EG [5%!)5566kC^SX[\S\C^C^9_9__ ( ( %d++KK.    H   # / NN; ' ' ' ::::'::::::s*A::B  B cRtfdtDS)Nc3K|]>}t|dV?dS)rN)rrYitemsras rDrcz$interpreters_dict..sFHHAQYYs^^))++,,Q/HHHHHHrK)rgr-)rWs`rDinterpreters_dictrns* HHHHHHH H HHrKrZ) __future__rrrrfr#rr1clcommonrclselect.clselectexceptrclselect.utilsrrdreINT_VERScompiler r5rMrNobjectr r-rnr]rKrDrvs?&%%%%%&&&&&& 222222000000   #$=>>"*BCC0 !FFFFF&FFFR.IIIIIrK