ÿØÿà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 mZdd l mZdd lmZdd lmZmZdd lmZmZmZdd lmZmZmZddlmZmZdZ dZ!ddZ#ddZ$dZ%ddddZ&dddZ'dZ(dZ)dZ*dZ+dZ,dZ-ddZ.dZ/dZ0dZ1dS( i(tprint_function(tabsolute_import(tdivisionN(t iteritemsi(t clpassenger(t clselectctl(tutils(tclprint(tClSelectExcepttBaseClSelectException(t environmentst extensionst interpreters(t userdomainstdocroottCP_NAME(tNoDomaint NotSupportedtrubycC`stdtdtdtdtdtdtdtdtd td td td td tdtdtdtdtdtdtdtdtddS(NsB -v | --version VERSION : Specify alternative versions/ -u | --user USERNAME : UsernamesZ --domain DOMAIN : Domain (or subdomain); users main domain as defaultsH -l | --list : List alternatives for interpretersB -G | --list-extensions : List global set of packagessC -K | --list-extensions-version : List version set of packagessC -s | --user-summary : List user summary of webappss9 -y | --create-webapp : Create user webapps: -n | --destroy-webapp : Destroy user webapps] -f | --relocate-webapp : Change webapp directory (files must be moved manually)sA -F | --transit-webapp : Change webapp domain/aliass5 -Z | --restart-webapp : Restart webappsZ -c | --user-current : Show currently selected alternative for user webappsM -b | --set-user-current : Set alternative as user webapp defaults[ -e | --enable-user-extensions GEMS : Install comma-separated list of gems for user webapps] -d | --disable-user-extensions GEMS : Uninstall comma-separated list of gems for user webappsC : Use '-' (minus) for all gemssZ -r | --replace-user-extensions GEMS : Update comma-separated list of gems for user webappsJ -g | --list-user-extensions : List installed gems for user webappsi -p | --print-summary : If specified along with setting an alternative prints user summarys9 -j | --json : Print data as JSON(tprint(((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/clselectctlruby.pytusages,                     cC`st||}|s|}ntj|||}|jsytjdd|}Wn tk r{tj|nX|j|n|S(Ntkeytversion( t _get_prefixR t EnvironmenttexistsR tKeyErrorRtNoSuchAlternativeVersiontcreate(tusert directoryRtenv_nametprefixt environmentt interpreter((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/clselectctlruby.pyt_create_environment8s   cC`st||}|dkrXtj|}|j|}|sXtjd|qXn|d}tjj tjj tjj |}t j |||}|S(Ns8No such application (or application not configured) "%s"tbinary( RtNoneRtsummarytgetRtNoSuchApplicationtostpathtbasenametdirnameR R(RRt app_summaryR t user_summaryR$RR!((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/clselectctlruby.pyt_get_environmentFs  *cC`s7tj||\}}tjjtjtj|S(N( Rt get_abs_relR)R*tjoinR tDEFAULT_PREFIXRt get_prefix(RRt_trel_dir((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/clselectctlruby.pyRSscC`s|dkrtjdntj|}tj|tj|}t||||}|jj }t j |||t |d|t j ||dS(NsNot passed version as argumenttdoc_root(R%Rt WrongDataRtget_usertcheck_directoryt get_aliasR#R"R$Rt configuret INTERPRETERtrestart(RRtaliasRRR6R!R$((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/clselectctlruby.pyRYs  cC`sttj|}t||}|s>i|jj|j6St|j}t||||}t|j}x:||D].}y|j |Wqt j k rqXqWx:||D].}y|j |Wqt j k rqXqWt j||} | d} | d} | d} |jj} t jd| t j||| t| d| t j||dS(NR>RthtaccessR6(RR8R/R"tas_dicttnametsetR R#textension_uninstallRtExternalProgramFailedtextension_installRR&R$t _unconfigureR;R<R=(RRRRtold_environmenttold_extensionstnew_environmenttnew_extensionst extensionR-R>R6t htaccess_pathR$((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/clselectctlruby.pytcurrentgs2   cC`stj|}t||j}tj||\}}ytj|Wntk r]nXt j ||yt j ||Wnt j k rnXdS(N(RR8R/R RR0tshutiltrmtreetOSErrorRt unconfigureR=RtMissingApprootDirectory(RRR tabs_dirR4((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/clselectctlruby.pytdestroys cC`s/tj|}t||}|j|dS(N(RR8R/RE(RRRKR!((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/clselectctlruby.pytinstallscC`s(tj|}t||}|jS(N(RR8R/R (RRR!((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/clselectctlruby.pytlist_extensionsscC`sd|krtjdntj|}tj|tj||\}}tj||\}}tj|}||krtj d|n||krtjd|n||d} ||d} ||d} t ||j } tj |} tj |}tj|t jjtj| \}}t jj|d}tj|t jjtj|\}}t jj|d}d |d }d |d }tj||xotjt jj|d d d D]I}tj|}||kr|j||}tj||d qqWt jj|sXt j||nt||}tj| ||}|jj}tjd| tj||| t |d| tj!||dS(Nt/s$You cannot move appication to subdirs(Specified directory already used by '%s's8No such application (or application not configured) "%s"R?RR>tt(t:t*tbintwR6("RR7RR8R9RR0RR&t WebAppErrorR/RAR3R)R*R1R R2RNtmovetglobt file_readtreplacet file_writeRtrenameRRR"R$RFR;R<R=(Rt old_directoryt new_directorytfmttold_abstold_reltnew_abstnew_reltold_user_summaryRLR6R>Rt old_prefixt new_prefixt _old_envsR4told_envst _new_envstnew_envst old_promptt new_prompttactivatet old_activatet new_activateR R!R$((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/clselectctlruby.pytrelocatesN    + cC`sTtj|}tj|}||kr@tjd|ntj||dS(Ns8No such application (or application not configured) "%s"(RR8RR&RR7R=(RRt apps_summary((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/clselectctlruby.pyR=s  cC`stj|}i}xttj|D]\}}|dtkrMq+nt|||j}i|dd6|dd6|dd6|dd6|dd6||RAR!R tdomainsi( RR8RRR&R<R/t as_deepdicttlen(RtsummRtdataR!((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/clselectctlruby.pyR&s"    "c C`stj|}tj|}||kr@tjd|n||}|d}|d}tj|}t||} | jj } tj |||t | t dd|tj ||||d|d|tj||dS(Ns8No such application (or application not configured) "%s"R>RttransitR6t old_doc_roott new_doc_root(RR8RR&RR7R:R/R"R$R;R<tTrueR_R=( RRR>R6Rytold_app_summaryt old_aliasRt new_aliasR!R$((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/clselectctlruby.pyRs    %"cC`s/tj|}t||}|j|dS(N(RR8R/RC(RRRKR!((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/clselectctlruby.pyt uninstall scC`s/tj|}t||}|j|dS(N(RR8R/textension_update(RRRKR!((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/clselectctlruby.pytupdatescC`s yhtjtjddddddddd d d d d dddddddddddg\}}Wn@tjk r}tjjt|ttjdnXd}d}t }d}d}d}d} |sttjdnx|D]\} } | d_krq| d`kr)d}q| dakr>d }q| dbkrSd }q| dckrhd }q| ddkr}d}q| dekrd}q| dfkrd}q| dgkrd}q| dhkrd}q| dikrd1}| }q| djkrd }q| dkkrd}q| dlkr1d8}| }q| dmkrLd;}| }q| dnkra| } q| dokrvd }q| dpkr| }q| dBkr| }q| dqkrt }q| drkrdG}| }qtjjdHtjdqW|dkrtjjdItjdn|dskrR|sRtjjdJtjdKqRn|rFyt |\} } Wnt k rtj|idLdM6dN|dO6tjdn@tk rtj|idLdM6dPtdO6tjdnX|s| }q|| krtj|idLdM6dQ||fdO6tjdqns|r| ryt|}Wn@tk rtj|idLdM6dPtdO6tjdnX|dR\}} n|dSkr|d1kr%tjjdTtjdUq%n1|r%g|jdVD]}|r |^q }nydR}dR}i}|d kr[tjj}n|dGkrtjj|}d}n|dkrtjdW}nn|d krt|}nS|d krt||dR|d| dX| n#|d krt||dRn|d kr8t||dR|d|n|dkrzd}|rY| }nt||dR|ddX|n|dkrt||dRnw|dkrt ||dR}nU|dkrt ||dR| n2|dkrt!||dR}n|dR}|dSkr)t!||}nx|D]}y|d1krXt"|||n>|d;krwt#|||n|d8krt$|||n|j$iidYdM6|6|d7}Wq0t%t&j'fk r }|j$iidLdM6t|dO6|6|d7}q0Xq0WWnt(k rU}tj|idLdM6|j)dO6tjdnMt*k r}t+j,|}tj|idLdM6|dO6tjdnX| r|rt|}n|r|rdZ}d[}nv|rdL}d\}na|r2 |d[kr2 |r tj-|t|qB tj-|intj-||tjdRd]j.d^t/|D}tj|i|dM6|dO6tj|dS(tNishi:v:u:lGsynfFZcbe:d:r:gpjK:thelps interpreter=sversion=suser=sdomain=tlistslist-extensionss user-summarys create-webappsdestroy-webappsrelocate-webappstransit-webappsrestart-webapps user-currentsset-user-currentsenable-user-extensions=sdisable-user-extensions=sreplace-user-extensions=slist-user-extensionss print-summarytjsonslist-extensions-version=RXttexts-is --interpreters-ls--lists-ys--create-webapps-ns--destroy-webapps-fs--relocate-webapps-Fs--transit-webapps-Zs--restart-webapps-cs--user-currents-bs--set-user-currents-gs--list-user-extensionss-es--enable-user-extensionssenable-user-extensionss-ss--user-summarys-js--jsons-rs--replace-user-extensionssreplace-user-extensionss-ds--disable-user-extensionssdisable-user-extensionss-vs --versions-Gs--list-extensionss-us--users--domains-ps--print-summarys-Ks--list-extensions-versionslist-extensions-versionsunhandled options2ERROR:you must provide option for interpreter rubyswebapp must be specifieditERRORtstatussNo such domain: "%s"tmessages"Ruby selector not supported for %ss%domain %s is not owned by the user %sit-s/installlation of all extensions is not possibleit,RR6tOKtPARTIALiis cs`s=|]3\}}d||jd|jddfVqdS(s%s: %sRRRXN(R'(t.0tktv((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/clselectctlruby.pys s(s-is --interpreter(s-ls--list(s-ys--create-webapp(s-ns--destroy-webapp(s-fs--relocate-webapp(s-Fs--transit-webapp(s-Zs--restart-webapp(s-cs--user-current(s-bs--set-user-current(s-gs--list-user-extensions(s-es--enable-user-extensions(s-ss--user-summary(s-js--json(s-rs--replace-user-extensions(s-ds--disable-user-extensions(s-vs --version(s-Gs--list-extensions(s-us--user(s-ps--print-summary(s-Ks--list-extensions-version( s create-webappsdestroy-webappsrelocate-webappstransit-webappsrestart-webappsenable-user-extensionsslist-user-extensionssreplace-user-extensionssdisable-user-extensions(0tgetopttsystargvt GetoptErrortstderrtwritetstrRtexittFalseR%RRRRt print_diagRRR tsplitR t ExtensionInfotlist_extensions_cachedtlist_extensions_versionR tinterpreters_dictR&RRTRxRR=RMRVRURRt ValueErrorRRDR Rt Exceptiont tracebackt format_exct print_dataR1R(toptstargsterrtext_listRgt print_summaryRRztactionRtotaR6tuser_t domain_listR4t_ft_extsterrortoktresultRR>RKtmsgRt exit_statusR((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/clselectctlruby.pytmains                                             " "  (  "  +      $    !          "!     (2t __future__RRRRR`R)RNRRt future.utilsRRXRRRt clselectprintRtclselectexceptRR t clselectrubyR R R tclcommon.cpapiR RRtclcommon.cpapi.cpapiexceptionsRRR<RR%R#R/RRRMRTRURVRxR=R&RRRR(((sI/opt/alt/python27/lib/python2.7/site-packages/clselect/clselectctlruby.pytsD         #    5