ó
%_[c           @   s  d  Z  d d l Z d d l Z d d l Z d d l Z d d l m Z m Z m Z m	 Z	 m
 Z
 d d l m Z e
 rƒ d d l Z n  e d „ Z d „  Z e d „ Z d d d e d „ Z d	 „  Z e d
 „ Z d e e d „ Z d „  Z d e e d „ Z e d d d e d „ Z d S(   s   Launch applications utilities.iÿÿÿÿN(   t	   HOME_PATHt   LAUNCH_SCRIPTS_PATHt   LINUXt   MACt   WIN(   t   loggerc         C   sq   | } |  j  d d ƒ }  | j  d d ƒ } | j  d d ƒ } |  | k rm t j j | | j d ƒ d ƒ } n  | S(   s   Return the launch scripts path.s   \t   /iÿÿÿÿ(   t   replacet   ost   patht   joint   split(   t   root_prefixt   prefixt   default_scripts_patht   scripts_path(    (    s=   lib/python2.7/site-packages/navigator_updater/utils/launch.pyt   get_scripts_path   s    	c         C   s    d |  k r d |  k r d Sd S(   s-   Return quotes if needed for spaces on prefix.t    t   "t    (    (   R   (    (    s=   lib/python2.7/site-packages/navigator_updater/utils/launch.pyt
   get_quotes-   s    c         C   s³   t  |  | d | ƒ} t j j | ƒ s+ d S| d t j k rD | n
 | t j } t j | d ƒ } xH | D]@ } t j j | | ƒ } y t j | ƒ Wqk t k
 rª qk Xqk Wd S(   s;   Try to remove output, error logs for launched applications.R   Niÿÿÿÿs   *.txt(	   R   R   R	   t   isdirt   sept   globR
   t   removet	   Exception(   R   R   R   t	   scripts_pt   filest   file_t   log_path(    (    s=   lib/python2.7/site-packages/navigator_updater/utils/launch.pyt   remove_package_logs2   s    &c         C   s<  t  | | d | ƒ} t j j | ƒ r9 t j | ƒ } n g  } | d k rº xœ t d d ƒ D]X } d j d |  d | ƒ } d j d |  d | ƒ }	 | | k r[ |	 | k r[ | } Pq[ q[ Wn0 d j d |  d | ƒ } d j d |  d | ƒ }	 | r#| r#t j j | | ƒ }
 t j j | |	 ƒ } n | }
 |	 } |
 | | f S(	   s7   Return the package log names for launched applications.R   i   i'  s   {package_name}-out-{i}.txtt   package_namet   is   {package_name}-err-{i}.txtN(	   R   R   R	   R   t   listdirt   Nonet   ranget   formatR
   (   R   R   R   t   id_R   R   R   R    t
   stdout_logt
   stderr_logt   stdout_log_patht   stderr_log_path(    (    s=   lib/python2.7/site-packages/navigator_updater/utils/launch.pyt   get_package_logsF   s0    				c         C   sS   xL t  j d j t  j ƒ D]1 } t  j j | |  ƒ } t  j j | ƒ r | Sq Wd S(   sX   
    Return program absolute path if installed in PATH.

    Otherwise, return None
    t   PATHN(   R   t   environR   t   pathsepR	   R
   t   isfile(   t   basenameR	   t   abspath(    (    s=   lib/python2.7/site-packages/navigator_updater/utils/launch.pyt   is_program_installeds   s     c         C   s(  d t  j k r" t  j j d ƒ n  | p+ d } t | | d | ƒ} t  j j | ƒ se t  j | ƒ n  t  j j | d j | | ƒ ƒ } t	 d | d | ƒ t
 rï t t j j j ƒ  ƒ } d | }	 t j | d |	 ƒ  }
 |
 j |  ƒ Wd	 QXn% t | d ƒ  }
 |
 j |  ƒ Wd	 QXt  j | d
 ƒ | S(   sE   Create the script to run the application and activate th eenvironemt.t   QT_APIt   appR   s   {0}.{1}R   R   t   cpt   wNiÿ  (   R   R,   t   popR   R	   R   t   makedirsR
   R$   R   R   t   strt   ctypest   cdllt   kernel32t   GetACPt   codecst   opent   writet   chmod(   t   commandR   R   R   t   suffixR   R   t   fpatht   codepageR4   t   f(    (    s=   lib/python2.7/site-packages/navigator_updater/utils/launch.pyt   create_app_run_script   s$    !
c         C   s%  t  | d | d |  d | ƒ\ } } }	 t |  ƒ }
 t | ƒ } t | |  ƒ } t t j j j ƒ  ƒ } |  j d d ƒ }  d j	 d | d |  d	 | d
 | d |
 d | d | d | ƒ } | j d d ƒ } d } t
 | | |  | | ƒ } d } i | d 6t d 6t d 6| d 6| d 6|	 d 6| d 6} | S(   sA   Generate command to run on win system and enforce env activation.R   R   R   s   \R   s®   chcp {CODEPAGE}
call {QUOTE}{CONDA_ROOT_PREFIX}/Scripts/activate{QUOTE} {QUOTE}{CONDA_PREFIX}{QUOTE}
{COMMAND} >{QUOTE_LOGS}{OUT}{QUOTE_LOGS} 2>{QUOTE_LOGS}{ERR}{QUOTE_LOGS}
t   CODEPAGEt   CONDA_PREFIXt   CONDA_ROOT_PREFIXt   COMMANDt   QUOTEt
   QUOTE_LOGSt   OUTt   ERRt   bati   t   creationflagst   shellt   cwdt   envt   argst   idt   cmd(   R*   R   t   parse_command_argsR8   R9   R:   R;   R<   R   R$   RF   t   TrueR    (   R   RA   R   R   t   environmentR   t	   non_condaR(   R)   R%   t   quotet
   quote_logst   quoted_commandRD   RV   RB   RC   t   CREATE_NO_WINDOWt
   popen_dict(    (    s=   lib/python2.7/site-packages/navigator_updater/utils/launch.pyt   get_command_on_win¬   sJ    
			
c         C   s¿   g  } xe |  D]] } | d k r/ | j  d ƒ q d | k r] | j d | ƒ } | j  | ƒ q | j  | ƒ q Wg  } x5 | D]- } t | ƒ } | | | } | j  | ƒ q{ Wd j | ƒ } | S(   NR>   s	   ${PREFIX}R   (   t   appendR   R   R
   (   RA   R   t   new_argsRV   t   new_argt
   final_argst
   arg_quotesR]   (    (    s=   lib/python2.7/site-packages/navigator_updater/utils/launch.pyRW   ë   s    c         C   sÜ   t  | |  ƒ } t | d | d |  d | ƒ\ } }	 }
 t |  ƒ } t | ƒ } d j d |  d | d | d | d	 | d
 | d |	 ƒ } d } t | | |  | | d | ƒ} i t d 6t d 6| d 6| d 6|
 d 6| d 6} | S(   sB   Generate command to run on unix system and enforce env activation.R   R   R   s°   #!/usr/bin/env bash
source {QUOTE}{CONDA_ROOT_PREFIX}/bin/activate{QUOTE} {QUOTE}{CONDA_PREFIX}{QUOTE}
{COMMAND} >{QUOTE_LOGS}{OUT}{QUOTE_LOGS} 2>{QUOTE_LOGS}{ERR}{QUOTE_LOGS}
RH   RI   RJ   RK   RL   RM   RN   t   shRQ   RR   RS   RT   RU   RV   (   RW   R*   R   R$   RF   t   FalseR    (   R   RA   R   R   RY   R   RZ   R]   R(   R)   R%   R[   R\   RV   RB   RC   R_   (    (    s=   lib/python2.7/site-packages/navigator_updater/utils/launch.pyt   get_command_on_unix  s@    
			
c         C   s8  t  j t |  | f ƒ ƒ g  } x- | D]% }	 |	 j d d ƒ }
 | j |
 ƒ q& W|  j d d ƒ }  | j d d ƒ } d } t s… t rµ t d |  d | d | d | d | d	 | ƒ } n- t d |  d | d | d | d | d	 | ƒ } | j	 d
 ƒ } | j	 d ƒ } | j	 d ƒ }	 |	 t
 j | |  j } | | f } | S(   s(   Handle launching commands from projects.s   \R   iÿÿÿÿR   RA   R   R   RY   RZ   RT   RU   RV   (   R   t   debugR8   R   Ra   R   R   Rh   R`   R6   t
   subprocesst   Popent   pid(   R   RA   t   leave_path_alonet   working_directoryR   R   RY   RZ   t   new_commandRV   t   new_cmdRl   R_   RT   R%   t   p(    (    s=   lib/python2.7/site-packages/navigator_updater/utils/launch.pyt   launch8  s<    	(   t   __doc__R=   R   R   Rj   t   navigator_updater.configR    R   R   R   R   t   navigator_updater.utils.logsR   R9   R   R   R   R"   R*   R1   RF   Rg   R`   RW   Rh   Rr   (    (    (    s=   lib/python2.7/site-packages/navigator_updater/utils/launch.pyt   <module>   s:   (	(	,8	4