ÿØÿà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@`s|ddlmZddlmZddlmZddlZddlZddlZddlmZm Z ddl m Z ddl j Z ddl Z ddlmZddlmZdd lmZdd lmZmZdd lmZmZmZdd lmZdd lmZmZm Z m!Z!ddl"m#Z#ddlm$Z$ddlm%Z%de%ee&fdYZ'dS(i(tabsolute_import(tprint_function(tdivisionN(tABCMetatabstractmethod(tdatetime(t iteritems(tClPwd(tbyteify(tget_file_linestwrite_file_lines(t pretty_jsontdelete_using_realpath_keyst get_abs_rel(tClSelectExcept(tBaseSelectorErrortAbsentFileErrortMissingVirtualenvErrortMissingAppRootErrori(tBaseSelectorManager(tget_using_realpath_keys(twith_metaclasstBaseApplicationsManagercB`seZdZd#ZdZd#Zd#Zd#ZdZ e dZ dZ dZ dZedZed#dZd Zeed Zd#d Zd#d Zd ZdZdZdZdZdZdZdZdZ dZ!dZ"dZ#edZ$d#dZ%d#dZ&dZ'dZ(dZ)d#dZ*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`sWy9tjjd}t|jd||fgdWnttfk 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|jjdD]} | r\| ^q\} || kr|| kr| j|} | j|} | | | d5n|dk r4| j|| jdx3|jD]%\} }| jdj| |qW| 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 issSetEnv {0} {1}s 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_dirt config_data((sS/opt/alt/python27/lib/python2.7/site-packages/clselect/baseclselect/apps_manager.pytremove_app_from_configms c C`s|j|}xt|D]\}}|rKtjd||d}ntjd||d}|dk rtdj|dt| ||ds(    "