ÿØÿà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@`sddlmZddlmZddlmZddlZddlZddlZddlZddlZddl Z ddl m Z ddl m Z ddl mZmZmZmZdd lmZmZdd lmZmZddlZdd lmZdd lmZd ZdZdZdZdZ dZ!dZ"de#fdYZ$e%e%dZ&e%e%dZ'e%e%dZ(e%e%dZ)dS(i(tprint_function(tabsolute_import(tdivisionN(tdatetime(t get_directory(t check_callt check_outputt list_dirst run_commandi(tEXTENSION_PATTERNt ExtensionInfo(t Interpretert interpreters(tJSONDecodeError(tClSelectExceptt virtualenvs.virtualenv.backups/usr/bin/virtualenvt#s/usr/share/l.v.e-manager/utilstpython_wrappersset_env_vars.pyt EnvironmentcB`s eZdddZdZdZddZdedZddddZ e dZ ddZ dZ d Zd Zd Zd Zd ZdZdZdZdZddZddZe e eddZddZdZRS(cC`s||_|r||_ntjtjj|_tj|jj|_ tj j |j d|_ |dkrt|_n ||_tj j t|j|j||_ tj j t|jt|j|_d|_d|_d|_d||_idd6|_dS(Ns .pip/pip.logtpythons MySQL-pythontMySQLdb(tnametusertpwdtgetpwuidtostgetuidtpw_nametgetpwnamtpw_dirthomepathtpathtjoint pip_logfiletNonetDEFAULT_PREFIXtprefixt _abs_prefixt BACKUP_PREFIXt backup_patht _requirementst _interpretert_piptinterpreter_namet_extension_remap(tselfRRR$((sY/opt/alt/python27/lib/python2.7/site-packages/clselect/clselectpythonuser/environments.pyt__init__%s"     '     cC`s,d|jj|jj|j|j|jfS(Ns(%s.%s(name='%s', user='%s', prefix='%s')(t __class__t __module__t__name__RRR$(R-((sY/opt/alt/python27/lib/python2.7/site-packages/clselect/clselectpythonuser/environments.pyt__repr__;sc`s(tjjfd}|S(Nc`sDtjjtjjjtjd<jtjdtgetattr(R-tkeyte((sY/opt/alt/python27/lib/python2.7/site-packages/clselect/clselectpythonuser/environments.pytas_dictKs  cC`ski|jd6|jjd6}|rF|ji|jd6n|rg||=i|t||6S|S(NRR=R>(RR=RBtupdateR>R?(R-R@twith_extensionsRA((sY/opt/alt/python27/lib/python2.7/site-packages/clselect/clselectpythonuser/environments.pyt as_deepdictVs  c C`s|st}n|j}|r9tjj||}ndjttjj|j|j}t d|d|j |g}i|j d6|j d6|d6}yt ||Wntjk r}t|}d} d|krd} nd |kri|jd |jd d } || jd } | d ksE| d krN|} qo|| } || d } n|} tjd| d| nX|jdS(Ns({}:{})s--prompts--pythont preexec_fntcwdtwaitsDisk quota exceededsJDisk quota exceeded. Contact system administrator to increase disk quota.t Tracebackt:is itmessagetdetails(R RRR tformatRtbasenameR$RtVIRTUALENV_BINtbinaryR<RRRtExternalProgramFailedtstrR"tfindtrfindtconfigure_environment( R-R=tversionRHRtprompttargstkwargsterrt err_traceterr_textterr_chart err_trace_end((sY/opt/alt/python27/lib/python2.7/site-packages/clselect/clselectpythonuser/environments.pytcreateds>  $  $        cC`sFtjj|jd}tjj||j}|d}tjj|rPdStjj|rrtj|ntj||y8tjj|stjtjjt t |nWn3t t fk r|rtj||nnXtjjtjj|t sBtjtjjt t tjj|t ndS(s Configures environment: 1. Rename binary to pythonX.Y_bin 2. Makes symlink from python binary to python_wrapper tbint_binN(RRR R+tislinktexiststremovetrenametsymlinkt WRAPPERS_PATHtPYTHON_WRAPPERtIOErrortOSErrortSET_ENV_VARS_SCRIPT(R-t auto_restoretbin_pathtinterpreter_pathtnew_interpreter_path((sY/opt/alt/python27/lib/python2.7/site-packages/clselect/clselectpythonuser/environments.pyRUs$ &!cC`s_|j}|r'tjj||}ntjj|r[tddd|d|jndS(Ns/bin/rms-rs--interactive=neverRF(RRR RcRR<(R-RVR((sY/opt/alt/python27/lib/python2.7/site-packages/clselect/clselectpythonuser/environments.pytdestroys  cC`s"||jkr|j|S|SdS(s Returns extensions name considering extension remap table :param extension_name: Input extension name :return: Result extension name N(R,(R-textension_name((sY/opt/alt/python27/lib/python2.7/site-packages/clselect/clselectpythonuser/environments.pyt_get_extension_names cC`stjj|j|}tjj|jd|s:dStd||j||j|}g}tjj|rt|d}|j }|j n|j d||j d|dt t|d}|j||j t|jd|dd|j|dS( sX Recreate python virtual environment with requirements :return: RVNsRe-create python virtualenv:trRHtwtinstalls-r(RRR Rctpiptprintt _pip_freezetpip_requirementstopent readlinestcloseRpR_tTruet writelinesR(R-RVtenv_pathtrequirements_patht requirementst reqs_file((sY/opt/alt/python27/lib/python2.7/site-packages/clselect/clselectpythonuser/environments.pyt _recreates&      cC`s1x*tddjD]}|j|qWdS(NR@RV(R tkeysR(R-RV((sY/opt/alt/python27/lib/python2.7/site-packages/clselect/clselectpythonuser/environments.pytrecreatescC`stjj|jS(N(RRRc(R-((sY/opt/alt/python27/lib/python2.7/site-packages/clselect/clselectpythonuser/environments.pyRcscC`s(|js!td|j|_n|jS(NR$(R)R R(R-((sY/opt/alt/python27/lib/python2.7/site-packages/clselect/clselectpythonuser/environments.pyR=s cC`s|j|}tj|j}|jt}|d|dpDd}}ddd|jd|jd|f}|r|d}ddd|jd|jd|d |f}ntj|||rt d |nt d |d |j d |j |j dS(Niits /bin/bashs-ls-cs --log-file=s install s==s6Extension '%s' install is prohibited. System extensionRXRFRG(RrR tget_locked_extensionsR+tsplittVERSION_DELIMITERRvR!tis_extensions_lockedt ValueErrorRR<RRx(R-Rqtlocked_extensionsttt extensionRVtcommand((sY/opt/alt/python27/lib/python2.7/site-packages/clselect/clselectpythonuser/environments.pytextension_installs "  -"cC`s`ddd|jd|jdj|f}td|d|jd|j|jdS( Ns /bin/bashs-ls-cs --log-file=s install -r {}RXRFRG(RvR!RMRR<RRx(R-RR((sY/opt/alt/python27/lib/python2.7/site-packages/clselect/clselectpythonuser/environments.pytextension_install_requirementss"c C`sFt|jd|jdd|d|jd|j|jdS(Ns --log-file=Rus --upgradeRFRG(RRvR!R<RRx(R-R((sY/opt/alt/python27/lib/python2.7/site-packages/clselect/clselectpythonuser/environments.pytextension_updates c C`stj|j}|jt}|d|dp5d}}|rO|d}ntj|||rwtd|ntj|j d|j d|fd|j dtj d tj d tj d |j }|jd \}}|jrt|p|n|jdS( NiiRs$Extension '%s' removal is prohibiteds --log-file=t uninstallRFtstdintstderrtstdoutRGty(R RR+RRRRt subprocesstPopenRvR!R<tPIPERt communicatet returncodet ExceptionRx(R-RRRRVtpRR((sY/opt/alt/python27/lib/python2.7/site-packages/clselect/clselectpythonuser/environments.pytextension_uninstall s + c C`si}tj|j}ykt|jdd|jdd|jd|j}gtj |D]}|d|df^qb}Wnit t t t jt jfk rt|jdd|jd|jd|j}tj|}nXd|D}xt||D]\\}}} tj|||rttg|jd D]} | j^qLt|j|} | rt|j|d kri| d 6d j| d6||$st,itdocs, (R RR+RRvR!R<RtjsontloadsR tKeyErrorRRtFileProcessErrorRQR tfindalltzipRRtsetRtstriptgettlenR ( R-tresultRtoutputtxR>tdocsRRVRtvt version_diff((sY/opt/alt/python27/lib/python2.7/site-packages/clselect/clselectpythonuser/environments.pyR>s$74"4 ".!'cC`sY|dk r(tjj|j|ddS|jsRtjj|jdd|_n|jS(NR`Rv(R"RRR R*(R-RV((sY/opt/alt/python27/lib/python2.7/site-packages/clselect/clselectpythonuser/environments.pyRv1s   !cC`s;|dk r%tjj|j|dStjj|jdS(Nsrequirement.pip(R"RRR (R-RV((sY/opt/alt/python27/lib/python2.7/site-packages/clselect/clselectpythonuser/environments.pyRy8s cC`st}|j}|r(||j}ntdd|j}t}|jdtjjd} t j |j} t j |j| t j | | j| jyx|jD]} tj|j|jr| rt}|rtd| qqn|r tjjd|j| fntddd |j| f|j| td qWt}Wn[ttfk r} td t| x|D]} t j| | qWt j| nX|st j| n|S( s_ copy binary python from /opt/alt/pythonXY/bin/pythonX.Y to virtualenvdir/bin/pythonX.Y :param backup: make backup old python interpreter :param force: force rewrite python interpreter without check :param verbose: print actions details to stdout :return: True - updating success; False - updating fail R@RVs.orig_%ss%Y-%m-%d_%H-%Ms not need updating; skip '%s's copy '%s' -> '%s'...tcmds/bin/cps--forcetDonesFail %s(tFalseR=RVR Rt python_binRtnowtstrftimeRtstattshutiltcopytchowntst_uidt binary_listtfilecmptcmpRPRwtsysRtwriteRtappendR}RjRiRRtcopyfiletunlink(R-tbackuptforcetverboset_alt_interpreters_dictt update_resultR=tmain_interpretert updated_listt python_backuptstat_tvirtualenv_python_binRAtupdated_python((sY/opt/alt/python27/lib/python2.7/site-packages/clselect/clselectpythonuser/environments.pytupdate_python_interpreter=s>       c C`s{tjj|j|sdS|j|ddf}t|j|d}td|d|jd|jd|dS( sX Output installed packages in requirements format :return: None Ntfreezes-lRtRXRFRGR( RRRcRvRzRyRR<R(R-RVRtf((sY/opt/alt/python27/lib/python2.7/site-packages/clselect/clselectpythonuser/environments.pyRxls cC`s4x-tddjD]}|jd|qWdS(sX Output installed packages in requirements format :return: None R@RVN(R RRx(R-RV((sY/opt/alt/python27/lib/python2.7/site-packages/clselect/clselectpythonuser/environments.pyt pip_freezexsN(R1R0R"R.R2R<RBR}RER_RRURpRrRRRcR=RRRRR>RvRyRRxR(((sY/opt/alt/python27/lib/python2.7/site-packages/clselect/clselectpythonuser/environments.pyR#s.  .   !          / cC`s]|st}n|r4tjjtj|j|Stjjtjtjj|SdS(N( R#RRR RRRRR(RR$((sY/opt/alt/python27/lib/python2.7/site-packages/clselect/clselectpythonuser/environments.pyR%s  cC`sht||}yt|}Wntk r3gSXg}x'|D]}|jt|||qAW|S(N(R%RRjRR(RR$t venv_pathtenv_listtenvstenv_name((sY/opt/alt/python27/lib/python2.7/site-packages/clselect/clselectpythonuser/environments.pyt environmentss  c`s#tfdt||DS(Nc3`s-|]#}t|jdjVqdS(R@N(RRBtitems(RRA(R@(sY/opt/alt/python27/lib/python2.7/site-packages/clselect/clselectpythonuser/environments.pys s(tdictR(R@RR$((R@sY/opt/alt/python27/lib/python2.7/site-packages/clselect/clselectpythonuser/environments.pytenvironments_dictsc`s#tfdt||DS(Nc3`s-|]#}t|jdjVqdS(R@N(RRER(RRA(R@(sY/opt/alt/python27/lib/python2.7/site-packages/clselect/clselectpythonuser/environments.pys s(RR(R@RR$((R@sY/opt/alt/python27/lib/python2.7/site-packages/clselect/clselectpythonuser/environments.pytenvironments_deepdicts(*t __future__RRRRRRRRRRtclselect.clselectctlRtclselect.utilsRRRRR>R R R R t simplejsonRR tclselect.clselectexceptRR#R&RORRgRhRktobjectRR"R%RRR(((sY/opt/alt/python27/lib/python2.7/site-packages/clselect/clselectpythonuser/environments.pyts:      " _