ó
Ò:\c           @   sÐ  d  Z  d d l Z d d l Z d d l Z d d l Z d d l Z d d l Z d d l Z d d l Z d d l	 m
 Z
 d d l m Z m Z m Z m Z m Z m Z d d l 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 e d „ Z" d e d „ Z# d d „ Z$ d d d „ Z% d „  Z& d d d „ Z' d d d „ Z( d d d „ Z) d S(   s   Launch applications utilities.iÿÿÿÿN(   t   AnacondaAPI(   t	   CONF_PATHt	   HOME_PATHt   LAUNCH_SCRIPTS_PATHt   LINUXt   MACt   WIN(   t   logger(   t   run_as_adminc         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/anaconda_navigator/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/anaconda_navigator/utils/launch.pyt
   get_quotes4   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/anaconda_navigator/utils/launch.pyt   remove_package_logs9   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/anaconda_navigator/utils/launch.pyt   get_package_logsM   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/anaconda_navigator/utils/launch.pyt   is_program_installedz   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   codepageR7   t   f(    (    s>   lib/python2.7/site-packages/anaconda_navigator/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_argsR;   R<   R=   R>   R?   R
   R'   RI   t   TrueR   (   R   RD   R"   R   t   environmentR   t	   non_condaR+   R,   R(   t   quotet
   quote_logst   quoted_commandRG   RY   RE   RF   t   CREATE_NO_WINDOWt
   popen_dict(    (    s>   lib/python2.7/site-packages/anaconda_navigator/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(   NRA   s	   ${PREFIX}R   (   t   appendR
   R   R   (   RD   R   t   new_argsRY   t   new_argt
   final_argst
   arg_quotesR`   (    (    s>   lib/python2.7/site-packages/anaconda_navigator/utils/launch.pyRZ   ò   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}
RK   RL   RM   RN   RO   RP   RQ   t   shRT   RU   RV   RW   RX   RY   (   RZ   R-   R   R'   RI   t   FalseR   (   R   RD   R"   R   R\   R   R]   R`   R+   R,   R(   R^   R_   RY   RE   RF   Rb   (    (    s>   lib/python2.7/site-packages/anaconda_navigator/utils/launch.pyt   get_command_on_unix  s@    
			
c	         C   sV  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
 r1| r1t | g ƒ } n! t j | |  j } | | f } | S(   s(   Handle launching commands from projects.s   \R	   iÿÿÿÿR   RD   R"   R   R\   R]   RW   RX   RY   (   R   t   debugR;   R
   Rd   R   R   Rk   Rc   R9   R   R   t
   subprocesst   Popent   pid(   R   RD   t   leave_path_alonet   working_directoryR"   R   R\   R]   t   as_admint   new_commandRY   t   new_cmdRo   Rb   RW   R(   t   p(    (    s>   lib/python2.7/site-packages/anaconda_navigator/utils/launch.pyt   launch?  s@    	c         C   sÛ  | } t  j d k r\ |  r- d j |  ƒ } n d } t j | ƒ t j | d t d | ƒn{t j	 d k r|  rƒ d j |  ƒ } n d } t  j
 j t d	 ƒ } t | d
 ƒ  } | j | ƒ Wd QXt  j | d ƒ t j d | ƒ t j d | g d t d | ƒnÐ t d ƒ ru|  r:d d d d d j |  ƒ g } n d d d g } t j d j | ƒ ƒ t j | d | ƒnb t d ƒ r×|  r¢d d d j |  ƒ g } n	 d g } t j d j | ƒ ƒ t j | d | ƒn  d S(   sD   Open command prompt console and optionally activate the environment.t   nts    start cmd.exe /k "activate "{}""s   start cmd.exeRT   RU   t   darwins.   bash --init-file <(echo "source activate {};")t   bashs   a.toolR8   Niÿ  s   open s   gnome-terminals   -xs   -cs/   bash --init-file <(echo "source activate {0};")s   -eR   t   xterm(   R   t   nameR'   R   Rl   Rm   Rn   R[   t   syst   platformR   R   R   RA   RB   RC   t   callR4   (   t   activateRq   RU   RY   t   fnameRH   (    (    s>   lib/python2.7/site-packages/anaconda_navigator/utils/launch.pyt   consolez  sL    #	c            s€   t  ƒ  ‰  ˆ p ˆ  j d d ƒ ‰ |  d k r? d d d g } n$ |  d k rZ d d	 g } n	 |  g } t ‡  ‡ f d
 †  | Dƒ ƒ S(   s"   Check if program exists in prefix.R{   t   roott   notebooks   jupyter notebooks   ipython-notebooks   jupyter-notebookt   ipythons   jupyter consolet   jupyterc         3   s-   |  ]# } ˆ  j  d  ˆ d | ƒ d k	 Vq d S(   R   t   pkgN(   t   conda_package_versionR%   (   t   .0Ru   (   t   apiR   (    s>   lib/python2.7/site-packages/anaconda_navigator/utils/launch.pys	   <genexpr>À  s   (   Rƒ   s   jupyter notebook(   R„   s   jupyter console(   R    t   conda_get_prefix_envnamet   any(   t   progR   t   pkgs(    (   R‰   R   s>   lib/python2.7/site-packages/anaconda_navigator/utils/launch.pyt
   check_prog³  s    		t   pythonc         C   sÍ  t  j d |  | ƒ t | |  ƒ s7 t d | |  ƒ ‚ n  | d k rL d } n* | d k ra d } n d | k rv d } n  t j d	 k rå |  r  d
 j |  | ƒ } n d j | ƒ } t  j d | ƒ t j d j | ƒ d t	 d t
 ƒnät j d k r|  r‚d |  k rqt j d d d g ƒ } xP | j ƒ  j d ƒ D]6 } | r4| j ƒ  d |  k r4| j ƒ  d }  Pq4q4Wn  |  d | } n | } t j j t d ƒ } d j |  | ƒ } t | d ƒ  } | j | ƒ Wd QXt j | d ƒ t  j d | ƒ t j d | g d t	 d t
 ƒn± |  r3d |  d  | } n  t d! ƒ rd! d" d# d$ | g } t  j d% j | ƒ ƒ t j | d t
 ƒd St d& ƒ rÉd& d' | g } t  j d% j | ƒ ƒ t j | d t
 ƒd Sd S((   sk   
    Run (i)python in a new console.

    It optionally run activate first on the given env name/path.
    s   %s, %ss,   Program not available in environment: %s, %sR   s	   python -iR„   s
   ipython -iRƒ   s   jupyter notebookRw   s   "activate "{}" & {}"s   "{}"s   start cmd.exe /k s   start cmd.exe /k {}RT   RU   Rx   R	   t   condaRV   t   lists   
i    iÿÿÿÿs   /bin/s   a.tools   source activate {0};{1}R8   Niÿ  s   open s   source activate s   ; s   gnome-terminals   -xRy   s   -cR   Rz   s   -e(   R   Rl   RŽ   t   RuntimeErrorR   R{   R'   Rm   Rn   R[   R   R|   R}   t   check_outputt   decodeR   R   R   R   RA   RB   RC   R~   R4   (   R   RŒ   RY   t   outt   lineR€   RD   RH   (    (    s>   lib/python2.7/site-packages/anaconda_navigator/utils/launch.pyt   py_in_consoleÅ  s`    			
#c          G   s  t  j t |  ƒ ƒ d j d j |  ƒ ƒ } t j d k rV t j d d d | g ƒ n´ t	 j
 d k r» d } t | d	 ƒ j | ƒ t j | d
 ƒ t j d | g d t ƒt j | ƒ nO d d d g } x= | D]5 } t | ƒ rÑ t j | d d j | ƒ g ƒ PqÑ qÑ Wd S(   s=   Start new console window, run command (given as string list).s   {0}R   Rw   t   starts   cmd.exes   /KRx   s   a.toolR8   iÿ  s   open RT   s   gnome-terminalt   konsoleRz   s   -es   "{}"N(   R   Rl   R;   R'   R   R   R{   Rm   Rn   R|   R}   RA   RB   RC   R~   R[   t   unlinkR4   (   RW   RY   R€   t   termst   term(    (    s>   lib/python2.7/site-packages/anaconda_navigator/utils/launch.pyt   run_ex  s    R   c         C   sd  d d l  m } | ƒ  } | d k r7 | j |  ƒ } n  t j j t d d g ƒ } d j | j	 |  ƒ } t
 j ƒ  } t j j | d d g ƒ } t j j | j |  ƒ d d	 g ƒ }	 i |	 d
 d d d g d 6| d 6d	 d 6}
 t j | ƒ } x· | D]¯ } t j j | | g ƒ } t j j | d g ƒ } t j j | ƒ rò t | d ƒ  } t j | j ƒ  ƒ } Wd QX| j d ƒ } | d k	 r¡|  | k r¡t j | ƒ q¡qò qò Wt j t j j | j d | ƒ ƒ d ƒ t | j d | ƒ d ƒ  } | j t j |
 ƒ ƒ Wd QXd j | ƒ } d } | d | } t j d j | |  g ƒ ƒ t j | j ƒ  d |  ƒd S(   s   Start notebook server.iÿÿÿÿ(   R    s   .ipythont   kernelss	   {0} ({1})s   {name}s   kernel.jsont   binR   s   -ms   IPython.kernels   -fs   {connection_file}t   argvt   display_namet   languaget   rNR{   i    R8   s2   jupyter notebook --KernelSpecManager.whitelist={0}s   jupyter notebookR   t   ,RU   (   t   anaconda_navigator.apiR    R%   t   load_projectR   R   R   R   R'   R{   t   uuidt   uuid1t
   env_prefixR$   R   R1   RA   t   jsont   loadst   readt   gett   shutilt   rmtreeR:   R   RB   t   dumpsR   Rl   Rm   Rn   (   t   project_patht   projectt   filenameR    R‰   t   kernels_folderR¡   t   kernel_uuidt   kernel_patht   pyexect   specRž   t   kernelR   t	   file_pathRH   t   dataR{   RY   RD   (    (    s>   lib/python2.7/site-packages/anaconda_navigator/utils/launch.pyt   run_notebook  s@    	$
)	c         C   sŽ   d d l  m } | ƒ  } | d k r7 | j |  ƒ } n  t j j | j |  ƒ d d g ƒ } t j	 d j | | g ƒ ƒ t
 j | | g ƒ d S(   s   Execute python in environment.iÿÿÿÿ(   R    RŸ   R   R¤   N(   R¥   R    R%   R¦   R   R   R   R©   R   Rl   Rm   Rn   (   R±   R²   R³   R    R‰   RY   (    (    s>   lib/python2.7/site-packages/anaconda_navigator/utils/launch.pyt   run_python_fileP  s    	$c         C   sl   d d l  m } | ƒ  } | d k r7 | j |  ƒ } n  t j j | j |  ƒ d d g ƒ } t | | ƒ d S(   s#   Execute python in env with console.iÿÿÿÿ(   R    RŸ   R   N(	   R¥   R    R%   R¦   R   R   R   R©   R   (   R±   R²   R³   R    R‰   RY   (    (    s>   lib/python2.7/site-packages/anaconda_navigator/utils/launch.pyt   run_python_console]  s    	$(*   t   __doc__R@   R   Rª   R   R®   Rm   R|   R§   t#   anaconda_navigator.api.anaconda_apiR    t   anaconda_navigator.configR   R   R   R   R   R   t   anaconda_navigator.utils.logsR   t$   anaconda_navigator.utils.win_elevateR   R<   R   R   R!   R%   R-   R4   RI   Rj   Rc   RZ   Rk   Rv   R   RŽ   R—   R   R¼   R½   R¾   (    (    (    s>   lib/python2.7/site-packages/anaconda_navigator/utils/launch.pyt   <module>   sV   .	(	,8	429B	2