%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /opt/alt/python27/lib/python2.7/site-packages/clselect/baseclselect/
Upload File :
Create Path :
Current File : //opt/alt/python27/lib/python2.7/site-packages/clselect/baseclselect/apps_manager.pyc

�
i�B^c@`s|ddlmZddlmZddlmZddlZddlZddlZddlmZm	Z	ddl
m
Z
ddljZddl
Z
ddlmZddlmZdd	lmZdd
lmZmZddlmZmZmZddlmZdd
lmZmZm Z m!Z!ddl"m#Z#ddlm$Z$ddlm%Z%de%ee&�fd��YZ'dS(i(tabsolute_import(tprint_function(tdivisionN(tABCMetatabstractmethod(tdatetime(t	iteritems(tClPwd(tbyteify(tget_file_linestwrite_file_lines(tpretty_jsontdelete_using_realpath_keystget_abs_rel(tClSelectExcept(tBaseSelectorErrortAbsentFileErrortMissingVirtualenvErrortMissingAppRootErrori(tBaseSelectorManager(tget_using_realpath_keys(twith_metaclasstBaseApplicationsManagercB`s�eZdZd#ZdZd#Zd#Zd#Zd�Z	e
d��Zd�Zd�Z
d�Zed�Zed#d��Zd	�Zeed
���Zd#d�Zd#d�Zd
�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Z d�Z!d�Z"d�Z#ed��Z$d#d�Z%d#d�Z&d�Z'd�Z(d�Z)d#d�Z*e+e+d �Z,d!�Z-d"�Z.RS($s[
    Base class that responsible for gathering and set information about applications.
    s/var/log/selectorctl.logcC`s||_t�|_dS(N(t_managerRt_pwd(tselftmanager((sS/opt/alt/python27/lib/python2.7/site-packages/clselect/baseclselect/apps_manager.pyt__init__1s	cC`sWy9tj�jd�}t|jd||fgd�Wnttfk
rRnXdS(si
        Writes string to log file
        :param log_str: String to write
        :return: None
        s%Y-%m-%d %H:%M:%Ss%s: %s
taN(RtnowtstrftimeR
t_LOG_FILE_NAMEtIOErrortOSError(tclstlog_strt	dt_string((sS/opt/alt/python27/lib/python2.7/site-packages/clselect/baseclselect/apps_manager.pytwrite_string_to_log5s
$cC`s-|j|�}|||<|j||�dS(s
        Add data to user's config (update info for an app with app_directory specified)
        :param str user: name of unix user
        :param str app_directory: Application root directory
        :param dict app_data: Application data
        :return: None
        N(tget_user_config_datatwrite_full_user_config_data(Rtusert
app_directorytapp_datatcurrent_dict((sS/opt/alt/python27/lib/python2.7/site-packages/clselect/baseclselect/apps_manager.pytadd_app_to_configBs
c	C`sld}d}|j|||d�}|dkr4dSt|d���}g|j�jd�D]}	|	r\|	^q\}
||
kr�||
kr�|
j|�}|
j|�}|
||d5n|dk	r4|
j|�|
jd�x3|j�D]%\}
}|
jdj|
|��q�W|
jd	�|
j|�nWdQXt|d
��}|j	dj
|
��WdQXdS(s?
        Add enviroment variables to .htaccess file for LVEMAN-1623
        :param str user_name: Name of unix user
        :param str app_directory: Application root directory
        :param dict env_vars: Dict of enviroment variables
        :param str doc_root: doc root of application
        :return: None
        sB# DO NOT REMOVE OR MODIFY. CLOUDLINUX ENV VARS CONFIGURATION BEGINs@# DO NOT REMOVE OR MODIFY. CLOUDLINUX ENV VARS CONFIGURATION ENDNtrs
is<IfModule Litespeed>sSetEnv {0} {1}s</IfModule>tw(tget_htaccess_by_appdirtNonetopentreadtsplittindextappendtitemstformattwritetjoin(Rt	user_nameR)tenv_varstdoc_roottenv_section_begintenv_section_endt
htaccess_filethtaccesstlinetlineststarttendtenv_vartvalue((sS/opt/alt/python27/lib/python2.7/site-packages/clselect/baseclselect/apps_manager.pytadd_env_vars_for_htaccessOs(	.


cC`sP|j|�}y$t|||�|j||�Wntk
rGtSXtSdS(s�
        Removes application from config
        :param user: User name
        :param app_dir: Application directory
        :return: True if app is exists in config,
        False - if app is not exists in config
        N(R&RR'tKeyErrortFalsetTrue(RR(tapp_dirtconfig_data((sS/opt/alt/python27/lib/python2.7/site-packages/clselect/baseclselect/apps_manager.pytremove_app_from_configms
c	C`s�|j|�}x�t|�D]�\}}|rKtjd||d�}ntjd||d�}|dk	rtdj|dt|� |��|d<qqW|j||�dS(s
        Replace domain in config files when it is renamed.
        :param username: domain owner
        :param domain: previous name
        :param new_domain: name after rename
        :param include_subdomains: whether we should also rename subdomains
        :return:
        s	(\.|^)%s$tdomains^%s$s{}{}N(	R&RtretsearchR0tunicodeR7tlenR'(	RtusernameRNt
new_domaintinclude_subdomainstfull_configtapptconfigtmatch((sS/opt/alt/python27/lib/python2.7/site-packages/clselect/baseclselect/apps_manager.pytreplace_domain_in_configss		cC`sMt||�\}}g|D]-}tjjtjj||��r|^qS(s6
        Return list of detected config files
        (R
tostpathtexistsR9(R:R)tpatternstabs_pathtrel_pathRX((sS/opt/alt/python27/lib/python2.7/site-packages/clselect/baseclselect/apps_manager.pyt_find_config_files�sc	C`s|j||�}|jj|�}|j||||�}djtj�djtjj	||��dj|d�g}|j
|j|j|||�|��|j
dd	�}|r�|jd|�n|jtjd�|j
t|��tj|�}t||d�d	S(
s�
        Creates .htaccess file for application based on application config data
        :param str user_name: User's name
        :param str app_root: Application root
        :param doc_root: Document root for the domain
        :return: None
        s{}
sPassengerAppRoot "{}"
sPassengerBaseURI "/{}"
tapp_uritpassenger_log_filesPassengerAppLogFile "%s"
s
R.N(tget_app_configRtget_homedirR/R7tclpassengertHTACCESS_BEGINR[R\R9textendt(get_interpreter_specific_passenger_linestget_binary_pathtgetR0R5tHTACCESS_ENDR	trm_double_empty_linesR
(	RR:tapp_rootR<t
app_configtuser_dirR?t	new_linesRc((sS/opt/alt/python27/lib/python2.7/site-packages/clselect/baseclselect/apps_manager.pytupdate_htaccess_file�s 
cC`s
t�dS(su
        Return list of lines that needs to be added to htaccess and are
        specific to the interpreter
        N(tNotImplementedError(tbinary_pathRo((sS/opt/alt/python27/lib/python2.7/site-packages/clselect/baseclselect/apps_manager.pyRi�scC`sL|j||�}|dkr*|j}ntjj||j||d|�S(s�
        Return a path to the environment's interpreter binary
        Get interpreter path for application
        :param user: owner of the application
        :param app_root: app path relative to user home (app-root)
        :param user_dir: User's home directory
        :param binary_name: name of binary in virtual environemnt (python, npm, node)
        :return: path to interpreter binary in virtual environment
        tbinN(tget_interpreter_version_for_appR0tBINARY_NAMER[R\R9tVENV_DIR(RR(RnRptbinary_nametversion((sS/opt/alt/python27/lib/python2.7/site-packages/clselect/baseclselect/apps_manager.pyRj�s
cC`s0|dkr|jj�Si|jj|�|6S(s�
        Retrives info about user(s).
        :param str | None username: Username to retrive information.
        :return: Dictionary with user info. Example:
          {'user1': pw_struct}
        N(R0Rt
get_user_dicttget_pw_by_name(RRS((sS/opt/alt/python27/lib/python2.7/site-packages/clselect/baseclselect/apps_manager.pytget_users_dict�s
cC`s�i}|j|�}tjj|�r�t|�}dj|�}yttj|��}Wq�t	t
fk
r�tjdj
|j���q�Xn|S(s�
        Get all data from user's config
        :param user: name of unix user
        :return: json data from user's config as dictionary
        tsUser config "{}" is broken(t_get_path_to_user_configR[R\tisfileR	R9Rtjsontloadst
ValueErrort	TypeErrorRt	WrongDataR7t_USER_CONFIG(RR(t_user_config_datatuser_configtdatatjoined_data((sS/opt/alt/python27/lib/python2.7/site-packages/clselect/baseclselect/apps_manager.pyR&�s"cC`s<|j|�}yt|||�SWntk
r7dSXdS(s�
        Retrieves full application config
        :param user: User name
        :param app_dir: Application directory
        :return: Application data as dictionary
            If None - No application data found in config
        N(R&RRHR0(RR(RKtuser_config_data((sS/opt/alt/python27/lib/python2.7/site-packages/clselect/baseclselect/apps_manager.pyRd�s

cC`s|j||�}|dS(s�
        Retrieves domain for provided user's application
        :param username: user name
        :param app_directory: application root directory
        :return str: application domain
        RN(Rd(RRSR)Ro((sS/opt/alt/python27/lib/python2.7/site-packages/clselect/baseclselect/apps_manager.pytget_app_domain�scC`s|j||�}|dS(s�
        Retrieves uri for provided user's application
        :param username: user name
        :param app_directory: application root directory
        :return str: application uri
        Rb(Rd(RRSR)R*((sS/opt/alt/python27/lib/python2.7/site-packages/clselect/baseclselect/apps_manager.pytget_app_uri	scC`s|j||�}|dS(s�
        Retrieves name of startup file for provided user's application
        :param username: user name
        :param app_directory: application root directory
        :return str: name of startup file of application
        tstartup_file(Rd(RRSR)R*((sS/opt/alt/python27/lib/python2.7/site-packages/clselect/baseclselect/apps_manager.pytget_app_startup_filescC`s|j||�}|dS(s�
        Retrieves status for provided user's app_directory
        :param username: user name
        :param app_directory: application root directory
        :return str: status of application
        t
app_status(Rd(RRSR)R*((sS/opt/alt/python27/lib/python2.7/site-packages/clselect/baseclselect/apps_manager.pytget_app_statusscC`sH|j||�}|dkr9tjdj|���n|d|jS(s�
        Retrieves interpreter version for provided user and application
        :param username: user name
        :param app_directory: application root directory
        :return str: major interpreter version
        s)Application config is missed for user: {}s
%s_versionN(RdR0RtConfigMissingErrorR7tINTERPRETER(RRSR)R*((sS/opt/alt/python27/lib/python2.7/site-packages/clselect/baseclselect/apps_manager.pyRv's
cC`s.|jj|�}tjj||j�}|S(s�
        Get full path to user config ~/${_USER_CONFIG}
        :param username: name of unix user
        :return: full path to config
        (RReR[R\R9R�(RRSt	user_hometapplication_config((sS/opt/alt/python27/lib/python2.7/site-packages/clselect/baseclselect/apps_manager.pyR4scC`s)|jjj|�}||kr%|SdS(s�
        Retrieves full version for supplied major version.
        :return: str - Full version or None if full version not found
        N(Rtpkgtget_full_versionR0(Rt
major_versiontfull_version((sS/opt/alt/python27/lib/python2.7/site-packages/clselect/baseclselect/apps_manager.pyt_get_full_version_for_short?scC`sV|j|kr'|||jd|<n+i|jd6i||6d6}|||j<dS(s@
        Add single application data to user_data_dest_dict
        :param users_data_dest_dict: Destination dictionary with application data
        :param user_pw_entry: User's passwd entry
        :param app_root_dir: Application root directory
        :param app_data: Application data
        :return: None
        tapplicationsthomedirN(tpw_nametpw_dir(Rtusers_data_dest_dictt
user_pw_entrytapp_root_dirR*t	user_data((sS/opt/alt/python27/lib/python2.7/site-packages/clselect/baseclselect/apps_manager.pyt_add_single_user_appIs	
cC`s=|j|j|�}t|d|�}t|�|d<dS(s<Add automatically-detected config files to user-defined listtconfig_filesN(RaR�tsettlist(RR*R�R�tconfig_files_detectedtmerged_files((sS/opt/alt/python27/lib/python2.7/site-packages/clselect/baseclselect/apps_manager.pyt)_add_detected_config_files_to_application]scC`s�x�t|�D]�\}}|j|d|j�}|dks
||krQq
nd||krri||d<ni|j|j||jdd�d6|d<|d|j=||d}|j|||�|j||||�q
WdS(sV
        Add all user's apps information to user_data_dest_dict
        :param user_pw_entry: User's passwd entry
        :param user_data_dest_dict: Destination dictionary with application data
        :param user_app_data: User's application data ([node|python|ruby]-selector.json file content as dictionary).
        :return: None
        s
%s_versiontusersRytactivatet
activate_patht
virtualenvN(	RR�R�R0RjR�R�R�R�(RR�tuser_data_dest_dictt
user_app_dataR�R*tfull_interpreter_versiont
users_dict((sS/opt/alt/python27/lib/python2.7/site-packages/clselect/baseclselect/apps_manager.pyt_add_all_user_appscscC`sDx=t|�D]/\}}d|kr2d|d<n|||<q
W|S(s�
        Append absent 'passenger_log_file' key with None value to each application
        :param user_config_dict: Sourse dictionary to modify
        :return: Modified dict with 'passenger_log_file' keys
        RcN(RR0(tuser_config_dictRnR*((sS/opt/alt/python27/lib/python2.7/site-packages/clselect/baseclselect/apps_manager.pyt_add_absent_passenger_log_file�s

cC`s|d
krtj�}ntjj||j�}tjj|�sTt|��nyn|dkr�tt	_
t	j|||dtdt�}nt
|�}t|jtjdj|����SWnMttttfk
r}tidd6i|d6t|�d6d	6��nXd
S(s]
        Read [python|ruby|node]-selector.json file from user's directory.
        :param euid: current effective uid
        :param user_homedir: user's home directory
        :param uid: uid for drop rights
        :param gid: gid for drop rights
        :return: Cortege contents_dict. None - there is no [python|ruby|node]-selector.json file in user's directory
        :raises BaseSelectorError if error. Exception contents:
                        {'message': "File %(file)s read/parse error: %(error)s",
                        'context': {'file': node_json_path, 'error': 'some message'}}
        it
exit_on_errort	write_logR~s)File %(file)s read/parse error: %(error)stmessagetfileterrortcontextN(R0R[tgeteuidR\R9R�R]RRJtsecureiotSILENT_FLAGtread_file_secureRIR	RR�R�R�R R!R�R�Rtstr(Rtuser_homedirtuidtgidteuidtjson_config_patht
file_lineste((sS/opt/alt/python27/lib/python2.7/site-packages/clselect/baseclselect/apps_manager.pytread_user_selector_config_json�s
	$)
cC`sXy?|dkr$|j||�}ntjj||dd�SWntk
rSdSXdS(s	
        Retrieve .htaccess for user and app
        :param user: Username
        :param app_dir: App dir
        :param doc_root: Document root for selected domain
        :param app_config: Optional app configuration
        :return: .htaccess full path
        Rbs	.htaccessN(R0RdR[R\R9RH(RR(RKR<Ro((sS/opt/alt/python27/lib/python2.7/site-packages/clselect/baseclselect/apps_manager.pyR/�s	
cC`sX|j|�}y t|||�}||d<Wntk
rCdSX|j||�dS(s�
        Retrieves application status
        :param user: User name
        :param app_dir: Application directory
        :param new_status: New appication status
        :type new_status: str
        :return: None
        R�N(R&RRHR'(RR(RKt
new_statusR�Ro((sS/opt/alt/python27/lib/python2.7/site-packages/clselect/baseclselect/apps_manager.pytset_app_status�s	
c	C`s�|j|�}tj�dks3tj�dkrEtjd��nt|�}y&tjd|d|dddd�Wn7t	t
tfk
r�}tj|d	j
|���nXd
S(s�
        Write data to user's config
        :param user: name of unix user
        :param config_data: data in json format
        :return: None
        is$root should not write to user configtcontentt	dest_pathtpermi�tsuffixt_tmps%Could not write json user config ({})N(RR[R�tgetegidRtSelectorExceptionRR�twrite_file_via_tempfileR R!R�tUnableToSaveDataR7(RR(RLR�tdumped_dataR�((sS/opt/alt/python27/lib/python2.7/site-packages/clselect/baseclselect/apps_manager.pyR'�s$	cC`s�|j�}x�t|�D]�\}}yh|j|j|j|j�}|dk	r�x7|j�D]&}|jd|j	�|kr_t
Sq_WnWqtk
r�qtk
r�}|j
|j|j�qXqWtS(s�
        Returns True if specified NodeJS version is in use by any app of any user.
        It will stop search on the first match.
        :param version: NodeJS interpreter major version
        :return True | False
        s
%s_versionN(R}RR�R�tpw_uidtpw_gidR0tvaluesRkR�RJRRR%R�R�RI(RRzt	user_infoR:R�tuser_apps_dataRWR�((sS/opt/alt/python27/lib/python2.7/site-packages/clselect/baseclselect/apps_manager.pytis_version_in_use�s
c	C`sy|j|�}Wn&tjjk
r;tj|��nX|j�}|d}x�t|�D]�\}}y5|j|j	|j
|j�}|j|||�Wq_t
k
r�q_tk
r}tj�dkr|j|j|j�d|j|jf|d<q|�q_Xq_W|S(s�
        Retrieves info about all installed NodeJS interpreters and user(s) applictions
        :param user: User name for read applictions. If None and current euid == 0 - all users will be processed.
            If current euid != 0 (called under some user), this argument will be ignored
             and only user with uid == euid will be processed
        :return: Dictionary with user(s) applications info
        :raises ClSelectExcept.NoSuchUser or BaseSelectorError
        tavailable_versionsis`Some user's %s can't be read. Some user(s) data absent in output. Please see file %s for detailstwarning(R}R�tclpwdtNoSuchUserExceptionRt
NoSuchUsert_get_interpreter_infoRR�R�R�R�R�RRR[R�R%R�R�R�R(	RR(R�tusers_apps_infoR�R:R�R�R�((sS/opt/alt/python27/lib/python2.7/site-packages/clselect/baseclselect/apps_manager.pytget_applications_users_infos(	

cC`s�|jj|�j}tjj||j|�}|rXtjj|�rXt|��ntjj||�}|r�tjj|�r�t	|��n||fS(s
        Calculate, check exists and return application folders
        This method does not check that application exists in config.
        :raises: NoSuchUserException, MissingVirtualenvError, MissingAppRootError
        :return: tuple(app_root, app_venv) with absolute paths
        (
RR|R�R[R\R9RxR]RR(RRSRntchk_envtchk_app_rootR�tapp_venv((sS/opt/alt/python27/lib/python2.7/site-packages/clselect/baseclselect/apps_manager.pytget_app_folders/scC`s|jj�}|S(s)Get initial information about interpreter(Rtget_summary(RR�((sS/opt/alt/python27/lib/python2.7/site-packages/clselect/baseclselect/apps_manager.pyR�AscC`s|jjj|�S(si
        Just a public proxy to internal method that blocks
        any actions with interpreter
        (RR�tacquire_interpreter_lock(Rt
it_version((sS/opt/alt/python27/lib/python2.7/site-packages/clselect/baseclselect/apps_manager.pyR�FsN(/t__name__t
__module__t__doc__R0R�RR�RxRwRtclassmethodR%R,RGRMRIRZtstaticmethodRaRrRRiRjR}R&RdR�R�R�R�RvRR�R�R�R�R�R�R/R�R'R�R�RJR�R�R�(((sS/opt/alt/python27/lib/python2.7/site-packages/clselect/baseclselect/apps_manager.pyR%sR	
	
						
	
	
	
	
		
			
"			*	((t
__future__RRRR�R[ROtabcRRRtclselect.clpassengerRfR�tfuture.utilsRtclcommonRtclcommon.clfuncRtclcommon.utilsR	R
tclselect.utilsRRR
tclselectRtclselect.baseclselectRRRRtselector_managerRRRtobjectR(((sS/opt/alt/python27/lib/python2.7/site-packages/clselect/baseclselect/apps_manager.pyt<module>s("

Zerion Mini Shell 1.0