k™gvgddlmZddlmZddlmZddlZddlZddlZddlmZm Z m Z ddl m Z dZ ejejed Zd Zd ZGd d eZddZddZddZddZdS))print_function)division)absolute_importN) check_call list_dirsrun_command_full) Interpreternodevenvz nodevenv.pyz /opt/cloudlinux/venv/bin/python3z package.jsoncreZdZddZdZdZddZddZddZd Z d Z d Z d Z ddZ dZdZdZdZdS) EnvironmentNc\||_|r||_n/tjt jj|_| t|_n||_tj t|j|j||_ d|_ d|_ d|z|_dS)Nnode)nameuserpwdgetpwuidosgetuidpw_nameDEFAULT_PREFIXprefixpathjoin _abs_prefix _interpreter_npminterpreter_name)selfrrrs 9./commons/lib/clselect/clselectnodejsuser/environments.py__init__zEnvironment.__init__s  :DII RY[[119DI >(DKK DKGLLTY !D!DdKK   & c j|jjd|jjd|jd|jd|jd S)N.z(name='z ', user='z ', prefix='z')) __class__ __module____name__rrrrs r __repr__zEnvironment.__repr__*s@ N % % %t~'>'>'> IIItyyy$+++/ 0r"cHtjjfd}|S)Nctjjtjjjtjd<jtjd<dS)NUSERHOME)rsetgidpw_gidsetuidpw_uidrenvironpw_dir)ruser_pwdsr funcz!Environment._demote..func2sI Iho & & & Iho & & &!%BJv !)BJv   r")rgetpwnamr)rr5r4s` @r _demotezEnvironment._demote/s:< ** 1 1 1 1 1 1  r"cl|j|d}|r||=t|||iS|SN)r interpreter)rr:getattrrkeyes r as_dictzEnvironment.as_dict:sMI++--    +#D#&&* *r"c|j|d}|r||=t|||iS|Sr9)rr:r?r;r<s r as_deepdictzEnvironment.as_deepdictDsYI++--5577    +#D#&&* *r"Fcttd|jg}|r|d||jd|i}t jdkrdg|z}t|i|dS)Nz--nodez--recreate-bin preexec_fnrz/bin/cagefs_enter) PYTHON_PATH NODEVENV_BINbinaryappendrr7rrr)rr: destroy_firstargskwargss r createzEnvironment.createNs  k(   * KK( ) ) ) DI / 9;;!  '(4/DD#F#####r"c\tddd|j|dS)Nz/bin/rmz-rz--interactive=neverrC)rrr7r(s r destroyzEnvironment.destroy[s99d$949"llnn . . . . . .r"cJtj|jSN)rrexistsr(s r rQzEnvironment.exists_sw~~di(((r"cR|jst|j|_|jS)N)r)rr rr(s r r:zEnvironment.interpreterbs+  > +49 = = =D   r"ct|js+tj|jdd|_|jS)Nbinnpm)rrrrr(s r rUzEnvironment.npmgs/y > TYu==DIyr"-c |df}|dkr||fz }nFtj|t}tj|sdSt |||dS)z Install nodejs extension :param cwd: current working directory for npm (it's full path to app root by default) :param extension: name and version of extension :return: None installrVr)rIrCcwdN)rUrrr APP_CONFIGisfilerr7)r extensionrYcommand config_paths r extension_installzEnvironment.extension_installls88::y)     | #GG',,sJ77K7>>+.. q DLLNNDDDDDDr"c|dg}||t||\}}}|S)z~ Install nodejs extension :param extensions_list: name and version of extension :return: None rXrM)rUextendrr7)rextensions_listr]ret_code_s r extension_install_single_callz)Environment.extension_install_single_callsM 88::y)''')'dllnnMMM!Qr"c tdNz!It's not used for nodejs selectorNotImplementedErrorrr\s r extension_updatezEnvironment.extension_update!"EFFFr"c tdrgrhrjs r extension_uninstallzEnvironment.extension_uninstallrlr"ctjtj|dd}t |ddg||\}}}|rtj|}ni}| di}g}| D]{\}}| ddsd|vsd |vr$|d d r| |d[| |d |d ||S) z Retrieves extensions dictionary for this virtual environment :return: Extensions list. Example: [u'xpath@0.0.27', u'https://github.com/visionmedia/express'] rlistz--json)rCrY dependenciesmissingFfromversionzgit+@) rrsplitrUrr7stripjsonloadsgetitems startswithrG) rrYrdoutputdata extensionsresultrinfos r rzEnvironment.extensionss\gmmBGMM$((**55a899!<'VX(FSWS_S_SaSagjkkk 61 <<>> :f%%DDDXXnb11 $**,, A AJD$xx 5)) V4-?-?9TXCXCXF|&&v.. A d6l++++ tI?@@@@ r"NNrP)F)rVN)r'r& __qualname__r!r)r7r?rArKrNrQr:rUr_rerkrnrr"r r r s . . . .000    $ $ $ $...)))!!!  EEEE.   GGGGGG!!!!!r"r c|st}|r7tjt j|j|Stjt jtjj|SrP) rrrrrr6r3rr)rrs r rrsd   Fw||CL..5v>>>w||CL55r=s r z$environments_dict..sEUUQQYY3Y''--//00UUUUUUr"dictrr=rrs` r environments_dictrs0 UUUU,tV:T:TUUU U UUr"cVtfdt||DS)Nc3K|]9}t|V:dSr)rprAr{rs r rz(environments_deepdict..sY55Q]]s]++113344555555r"rrs` r environments_deepdictrsE 5555%dF33555 5 55r"r) __future__rrrrxrrclselect.utilsrrr interpretersr rrrdirname__file__rErDrZobjectr rrrrrr"r rsQ&%%%%%&&&&&& BBBBBBBBBB%%%%%%w||BGOOH55}EE 0  ]]]]]&]]]@FFFF    VVVV555555r"