a
     ³ŠaÔ  ã                   @   s´   d Z ddlZddlmZ ddlZddlmZmZm	Z	 ddl
mZ ddl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 edƒZG dd„ deƒZdS )zStatus bar widget.é    N)ÚQPointÚQTimerÚSignal)ÚQMenu)Úget_translation)ÚBaseTimerStatus)Úadd_actionsÚcreate_action)Úget_list_conda_envs)Úget_interpreter_info)Úget_list_pyenv_envs)ÚWorkerManagerÚspyderc                       sŠ   e Zd ZdZdZdZeƒ Zd‡ fdd„	Zdd„ Z	d	d
„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zddd„Z‡  ZS )ÚInterpreterStatusú?Status bar widget for displaying the current conda environment.Zinterpreter_statusZmain_interpreterNc                    s   || _ tƒ  |¡ || _g | _i | _i | _d| _t| ƒ| _	| j
 | j¡ tdd| _t| ƒ| _| j d¡ | jj | j¡ | j ¡  |  ¡  dS )r   Ú é   )Zmax_threadsi`ê  N)Ú_interpreterÚsuperÚ__init__ÚmainZenv_actionsÚpath_to_envÚenvsÚvaluer   ÚmenuZsig_clickedÚconnectÚ	show_menur   Ú_worker_managerr   Z_get_envs_timerZsetIntervalZtimeoutÚget_envsÚstart)ÚselfÚparentZiconÚinterpreter©Ú	__class__© úLlib/python3.9/site-packages/spyder/plugins/maininterpreter/widgets/status.pyr   ,   s    


zInterpreterStatus.__init__c                 C   s¤   |   | j¡}t |¡s<|  dd¡ |  dd¡ |  tj¡ nbt | j¡sŠt t 	|d¡¡s€|  dd¡ |  dd¡ |  tj¡ qž|  
¡  n| j| jv rž|  ¡  | jS )z{
        Switch to default interpreter if current env was removed or
        update Python version of current one.
        ÚcustomFÚdefaultTz
conda-meta)Ú_get_env_dirr   ÚospÚisdirZset_confÚupdate_interpreterÚsysÚ
executableÚisfileÚjoinr   r   r   )r    Zenv_dirr%   r%   r&   Ú	get_valueF   s    

zInterpreterStatus.get_valuec                 C   s   | j r| j S dS )zOverride api method.r   )r   ©r    r%   r%   r&   Úget_tooltipf   s    zInterpreterStatus.get_tooltipc                 C   s
   |   d¡S )NZenvironment)Zcreate_iconr2   r%   r%   r&   Úget_iconj   s    zInterpreterStatus.get_iconc                 C   s(   t jdkrt |¡S t t |¡¡S dS )z.Get env directory from interpreter executable.ÚntN)ÚosÚnamer*   Údirname©r    r"   r%   r%   r&   r)   n   s    

zInterpreterStatus._get_env_dirc                 C   s0   t j| jvr|  t j¡ tƒ }tƒ }i |¥|¥S )z+Get the list of environments in the system.)r-   r.   r   Ú_get_env_infor
   r   )r    Z	conda_envZ	pyenv_envr%   r%   r&   Ú	_get_envsu   s
    zInterpreterStatus._get_envsc                 C   s2   | j  ¡  | j  | j¡}|j | j¡ | ¡  dS )z[
        Get the list of environments in a thread to keep them up to
        date.
        N)r   Zterminate_allZcreate_python_workerr;   Zsig_finishedr   Úupdate_envsr   )r    Úworkerr%   r%   r&   r   ‚   s    
zInterpreterStatus.get_envsc                 C   s`   | j jf i |¤Ž t| j  ¡ ƒD ]2}| j | \}}tjdkrD| ¡ n|}|| j|< q |  ¡  dS )z.Update the list of environments in the system.r5   N)	r   ÚupdateÚlistÚkeysr6   r7   Úlowerr   r,   )r    r=   ÚoutputÚerrorÚenvÚpathÚversionr%   r%   r&   r<   Œ   s    zInterpreterStatus.update_envsc                 C   s   | j  ¡  dS )z1Request to open the main interpreter preferences.N)Úsig_open_preferences_requestedÚemitr2   r%   r%   r&   Úopen_interpreter_preferences˜   s    z.InterpreterStatus.open_interpreter_preferencesc                 C   s|   | j }| ¡  tdƒ}t| || jd}t||gƒ |  ¡ }tjdkrHdnd}|  	| 
¡ td| ¡  | ƒ ¡}| |¡ dS )z+Display a menu when clicking on the widget.z,Change default environment in Preferences...)ÚtextZ	triggeredr5   é   é   iØÿÿÿN)r   ÚclearÚ_r	   rI   r   ZcontentsRectr6   r7   ZmapToGlobalZtopLeftr   ZheightZpopup)r    r   rJ   Zchange_actionZrectZ	os_heightÚposr%   r%   r&   r   œ   s    ýÿzInterpreterStatus.show_menuc              	   C   s¼   t jdkr| ¡ n|}z| j| }W nx tyœ   t dddd¡}d|v sR||v rXd}n d|v rfd}nd	|v rtd	}nd
}t|ƒ}|| j|< ||f| j|< Y n0 | j| \}}|› d|› dS )zGet environment information.r5   ZAppDataZLocalZProgramsr   z
Spyder.appZinternalZcondaZpyenvr'   z (ú))	r6   r7   rA   r   ÚKeyErrorr*   r0   r   r   )r    rE   r7   Zwin_app_pathrF   Ú__r%   r%   r&   r:   ­   s&    ÿ
zInterpreterStatus._get_env_infoc                 C   s0   |r
|| _ |  | j ¡| _|  | j¡ |  ¡  dS )z,Set main interpreter and update information.N)r   r:   r   Z	set_valueZupdate_tooltipr9   r%   r%   r&   r,   Ã   s
    z$InterpreterStatus.update_interpreter)NN)N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ZIDZCONF_SECTIONr   rG   r   r1   r3   r4   r)   r;   r   r<   rI   r   r:   r,   Ú__classcell__r%   r%   r#   r&   r   !   s     
r   )rV   r6   Úos.pathrE   r*   r-   Zqtpy.QtCorer   r   r   Zqtpy.QtWidgetsr   Zspyder.api.translationsr   Zspyder.api.widgets.statusr   Zspyder.utils.qthelpersr   r	   Zspyder.utils.condar
   Zspyder.utils.programsr   Zspyder.utils.pyenvr   Zspyder.utils.workersr   rN   r   r%   r%   r%   r&   Ú<module>   s   