
    Je                         d Z ddlZddlmZ ddlZddlmZmZ ddl	m
Z
 ddlmZmZ ddlmZ ddlmZ ddlmZ dd	lmZ  G d
 de
      Zy)zMain interpreter status widget.    N)QTimerSignal)BaseTimerStatus)
is_pynsistrunning_in_mac_app)get_list_conda_envs)get_interpreter_info)get_list_pyenv_envs)WorkerManagerc                   ~     e Zd ZdZdZdZ e       Z	 d fd	Zd Z	 fdZ
d Zd Zd	 Zd
 Zd Zd Zd ZddZ xZS )InterpreterStatus?Status bar widget for displaying the current conda environment.interpreter_statusmain_interpreterc                 >   || _         t        | 	  |       || _        g | _        i | _        i | _        d| _        t        j                  | _
        t               r/| j                  j                  dd      j                         | _
        t        d      | _        t!        |       | _        | j"                  j%                  d       | j"                  j&                  j)                  | j*                         | j"                  j-                          | j+                          y)r    zpythonw.exez
python.exe   )max_threadsi`  N)_interpretersuper__init__mainenv_actionspath_to_envenvsvaluesys
executabledefault_interpreterr   replacelowerr   _worker_managerr   _get_envs_timersetIntervaltimeoutconnectget_envsstart)selfparenticoninterpreter	__class__s       O/usr/lib/python3/dist-packages/spyder/plugins/maininterpreter/widgets/status.pyr   zInterpreterStatus.__init__%   s    ' 		
#&>> < (,'?'?'G'G|(--2UW $  -;  &d|((/$$,,T]];""$ 	    c                    | j                  | j                        }t        j                  |      s| j	                          | j                  S t        j
                  | j                        sat        j                  t        j                  |d            s| j	                          | j                  S | j                          | j                  S | j                  | j                  v r| j                          | j                  S )z{
        Switch to default interpreter if current env was removed or
        update Python version of current one.
        z
conda-meta)_get_env_dirr   ospisdir_on_interpreter_removedisfilejoinr'   r   update_interpreterr   )r)   env_dirs     r.   	get_valuezInterpreterStatus.get_valueC   s    
 ##D$5$56yy!((*" zz! D--. 99SXXg|<=,,. zz  zz   D$4$44'')zzr/   c                     | j                   j                          | j                  j                          t        |   |       y N)r#   stopr"   terminate_allr   
closeEvent)r)   eventr-   s     r.   r>   zInterpreterStatus.closeEvent`   s4    !!#**,5!r/   c                     t         j                  dk(  rt        j                  |      S t        j                  t        j                  |            S )z.Get env directory from interpreter executable.nt)osnamer2   dirnamer)   r,   s     r.   r1   zInterpreterStatus._get_env_dirf   s4    77d?;;{++;;s{{;788r/   c                     | j                   | j                  vr| j                  | j                          t               }t	               }i ||S )z+Get the list of environments in the system.)r   r   _get_env_infor   r
   )r)   	conda_env	pyenv_envs      r.   	_get_envszInterpreterStatus._get_envsm   sN    
 ##4+;+;;t778 ()	')	)))y))r/   c                    t         j                  dk(  r|j                         n|}	 | j                  |   }| j                  |   \  }}| d| dS # t        $ rd | j
                  |k(  rt               s
t               rd}nd|v rd}n	d|v rd}nd}t        |      }|| j                  |<   ||f| j                  |<   Y w xY w)zGet environment information.rA   internalcondapyenvcustomz ())
rB   rC   r!   r   KeyErrorr   r   r   r	   r   )r)   pathrC   version__s        r.   rG   zInterpreterStatus._get_env_infoz   s    !ww$tzz|D	.##D)D" iioGr'!$$#  	.((D0')Z\!DD*40G%)DT"#WoDIIdO	.s   A A*B=<B=c                 p    | j                  dd       | j                  dd       | j                  dd       y)zh
        Actions to take when the current custom interpreter is removed
        outside Spyder.
        custom_interpreter rO   FdefaultTN)set_confr)   s    r.   r4   z)InterpreterStatus._on_interpreter_removed   s/     	*C0h&i&r/   c                     | j                   j                          | j                   j                  | j                        }|j                  j                  | j                         |j                          y)z[
        Get the list of environments in a thread to keep them up to
        date.
        N)r"   r=   create_python_workerrJ   sig_finishedr&   update_envsr(   )r)   workers     r.   r'   zInterpreterStatus.get_envs   sS    
 	**,%%::4>>J##D$4$45r/   c                 <   | | j                   j                  di | t        | j                   j                               D ]H  }| j                   |   \  }}t        j
                  dk(  r|j                         n|}|| j                  |<   J | j                          y)z.Update the list of environments in the system.NrA    )	r   updatelistkeysrB   rC   r!   r   r7   )r)   r_   outputerrorenvrR   rS   s          r.   r^   zInterpreterStatus.update_envs   s    
 DII&v&		() 	)C IIcNMD' $&77d?4::<D%(DT"	) 	!r/   c                 8    | j                   j                          y)z1Request to open the main interpreter preferences.N)sig_open_preferences_requestedemitrZ   s    r.   open_interpreter_preferencesz.InterpreterStatus.open_interpreter_preferences   s    ++002r/   c                     |r|| _         | j                  | j                         | _        | j                  | j                         y)z,Set main interpreter and update information.N)r   rG   r   	set_valuerE   s     r.   r7   z$InterpreterStatus.update_interpreter   s5     +D''(9(9:
tzz"r/   )NNr;   )__name__
__module____qualname____doc__IDCONF_SECTIONr   ri   r   r9   r>   r1   rJ   rG   r4   r'   r^   rk   r7   __classcell__)r-   s   @r.   r   r      sT    I	B%L%+X"<:"9*%2'""3#r/   r   )rq   rB   os.pathrR   r2   r   qtpy.QtCorer   r   spyder.api.widgets.statusr   spyder.config.baser   r   spyder.utils.condar   spyder.utils.programsr	   spyder.utils.pyenvr
   spyder.utils.workersr   r   ra   r/   r.   <module>r}      s<    & 
  
 ' 6 = 2 6 2 .k# k#r/   