ó
‹²,]c           @   s‹  d  Z  d d l Z d d l Z d d l j 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 d d l m Z m Z m Z d d l m Z m Z m Z m Z d d l m Z m Z d d l m Z d d	 l m Z d d
 l m Z e j  d d k Z! e j" d k Z# d Z$ d d d Z% Z& Z' d „  Z( d „  Z) d „  Z* d e f d „  ƒ  YZ+ d „  Z, e- d k r‡e, ƒ  n  d S(   su   
Restart Spyder

A helper script that allows to restart (and also reset) Spyder from within the
running application.
iÿÿÿÿN(   t   PYQT5(   t   Qtt   QTimer(   t   QColort   QPixmapt   QIcon(   t   QApplicationt   QMessageBoxt   QSplashScreent   QWidget(   t   _t   get_image_path(   t   to_text_string(   t   qapplication(   t   CONFi    t   2t   ntgš™™™™™É?i   i   i   c         C   s’   t  |  ƒ }  t j ƒ  } | j t j O_ t j d j |  ƒ d t j d t j d | ƒ} | j	 ƒ  \ } } t
 | ƒ } | j ƒ  |  | k } | S(   sB   Check if a process is running on windows systems based on the pid.s   tasklist /fi "PID eq {0}"t   stdoutt   stderrt   startupinfo(   t   strt
   subprocesst   STARTUPINFOt   dwFlagst   STARTF_USESHOWWINDOWt   Popent   formatt   PIPEt   STDOUTt   communicateR   t   kill(   t   pidR   t   processt
   stdoutdatat
   stderrdatat   check(    (    s1   lib/python2.7/site-packages/spyder/app/restart.pyt   _is_pid_running_on_windows*   s    			
c         C   s1   y t  j |  d ƒ Wn t k
 r( t SXt Sd S(   s?   Check if a process is running on unix systems based on the pid.i    N(   t   osR   t   OSErrort   Falset   True(   R   (    (    s1   lib/python2.7/site-packages/spyder/app/restart.pyt   _is_pid_running_on_unix>   s
    c         C   s'   t  j d k r t |  ƒ St |  ƒ Sd S(   s/   Check if a process is running based on the pid.R   N(   R%   t   nameR$   R)   (   R   (    (    s1   lib/python2.7/site-packages/spyder/app/restart.pyt   is_pid_runningJ   s    
t	   Restarterc           B   s>   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d d „ Z RS(   s`   Widget in charge of displaying the splash information screen and the
       error messages.
    c         C   s»   t  t |  ƒ j ƒ  d d d d d d g |  _ t |  ƒ |  _ t t t d ƒ d ƒ ƒ |  _	 |  j
 t ƒ |  j	 j ƒ  } | j d ƒ |  j	 j | ƒ |  j	 j ƒ  |  j j j |  j ƒ d  S(   Nt    t   .s   ..s   ...s
   splash.svgt   svgi
   (   t   superR,   t   __init__t   ellipsisR   t   timer_ellipsisR   R   R   t   splasht
   setVisibleR'   t   fontt   setPixelSizet   setFontt   showt   timeoutt   connectt   animate_ellipsis(   t   selfR6   (    (    s1   lib/python2.7/site-packages/spyder/app/restart.pyR1   W   s    c         C   s4   |  j  j | t j t j Bt j Bt t j ƒ ƒ d S(   s   Show message on splash screen.N(   R4   t   showMessageR   t   AlignBottomt   AlignCentert   AlignAbsoluteR   t   white(   R=   t   text(    (    s1   lib/python2.7/site-packages/spyder/app/restart.pyt   _show_messagej   s    c         C   sN   |  j  j d ƒ } d t | ƒ |  j | } |  j  j | ƒ |  j | ƒ d S(   s5   Animate dots at the end of the splash screen message.i    t    N(   R2   t   popt   lent   splash_textt   appendRD   (   R=   R2   RC   (    (    s1   lib/python2.7/site-packages/spyder/app/restart.pyR<   o   s    c         C   s*   | |  _  |  j | ƒ |  j j d ƒ d S(   s1   Sets the text in the bottom of the Splash screen.iô  N(   RH   RD   R3   t   start(   R=   RC   (    (    s1   lib/python2.7/site-packages/spyder/app/restart.pyt   set_splash_messagev   s    	c         C   sÐ   i t  d ƒ t 6t  d ƒ t 6t  d ƒ t 6} i t  d ƒ t 6t  d ƒ t 6t  d ƒ t 6} | r† | j ƒ  } | | d j | ƒ } n
 | | } | | } |  j j ƒ  t j	 |  | | t j
 ƒ t | ƒ ‚ d S(	   s6  Launch a message box with a predefined error message.

        Parameters
        ----------
        error_type : int [CLOSE_ERROR, RESET_ERROR, RESTART_ERROR]
            Possible error codes when restarting/reseting spyder.
        error : Exception
            Actual Python exception error caught.
        sK   It was not possible to close the previous Spyder instance.
Restart aborted.s<   Spyder could not reset to factory defaults.
Restart aborted.s9   It was not possible to restart Spyder.
Operation aborted.s   Spyder exit errors   Spyder reset errors   Spyder restart errors   

{0}N(   R
   t   CLOSE_ERRORt   RESET_ERRORt   RESTART_ERRORt   __repr__R   R4   t   hideR   t   warningt   Okt   RuntimeError(   R=   t
   error_typet   errort   messagest   titlest   et   messaget   title(    (    s1   lib/python2.7/site-packages/spyder/app/restart.pyt   launch_error_message|   s    


N(	   t   __name__t
   __module__t   __doc__R1   RD   R<   RK   t   NoneR[   (    (    (    s1   lib/python2.7/site-packages/spyder/app/restart.pyR,   S   s   				c          C   sÖ  t  j d d ƒ r~ t t  j d d ƒ ƒ }  t t d  |  j d ƒ ƒ ƒ } t | ƒ d k rn | d t j	 d <q˜ |  t j	 d <n d	 t j	 d <d	 t j	 d <t
 ƒ  } t ƒ  } t rÅ t t d
 ƒ ƒ } n t t d ƒ ƒ } | j | ƒ | j t d ƒ ƒ t j	 j d d  ƒ } t j	 j d d  ƒ } t j	 j d d  ƒ } t j	 j d d  ƒ } t j t j t j t ƒ ƒ ƒ d }	 t j |	 ƒ d }
 t | | | | g ƒ s°d } t | ƒ ‚ n  t j | ƒ } t j | ƒ } t j | ƒ } t j | ƒ } d | k r-| rd | k r| d d g } q-| j d ƒ n  d | k rHd d g } n	 d g } d j | ƒ } d j | ƒ } t j } | r“t j |
 d ƒ } n' t j |
 d ƒ } t j | d d ƒ } d j | | | ƒ } t  } t  râd n d } xU t! t" | t# ƒ ƒ D]- } t$ | ƒ sPn  t% j& t# ƒ t' j( ƒ  qÿW| j) d t* ƒ t j	 j+ ƒ  } | rv| j t d ƒ ƒ d j | | | ƒ } y t, j- | d | d  | ƒ} Wn) t. k
 rÇ} | j) d t/ d! | ƒ n X| j0 ƒ  | j1 } d" } x’ t! t" | t# ƒ ƒ D]- } t$ | ƒ sPn  t% j& t# ƒ t' j( ƒ  qøWy | j2 ƒ  Wn) t3 k
 rb} | j) d t/ d! | ƒ qvX| j) d t/ ƒ n  | j t d# ƒ ƒ y t, j- | d | d  | ƒWn) t. k
 rÑ} | j) d t4 d! | ƒ n Xd  S($   Nt   maint   high_dpi_custom_scale_factort   high_dpi_custom_scale_factorst   ;i   i    t   QT_SCALE_FACTORt   QT_SCREEN_SCALE_FACTORSR-   s
   spyder.svgs
   spyder.pngs   Closing Spydert   SPYDER_ARGSt
   SPYDER_PIDt   SPYDER_IS_BOOTSTRAPt   SPYDER_RESETs<   This script can only be called from within a Spyder instances   --new-instances   --s   --resetRE   s   bootstrap.pyt   spydert   apps   start.pys   "{0}" "{1}" {2}iZ   i   RT   s   Resetting Spyder to defaultst   shellt   envRU   i   t
   Restarting(5   R   t   getR   t   listt   filterR_   t   splitRG   R%   t   environR   R,   R    R   R   t   setWindowIconRK   R
   RF   t   ospt   dirnamet   abspatht   __file__t   anyRS   t   astt   literal_evalRI   t   joint   syst
   executableR   t
   IS_WINDOWSt   ranget   intt
   SLEEP_TIMER+   t   timet   sleepR   t   processEventsR[   RL   t   copyR   R   t	   ExceptionRM   R   R   R   R&   RN   (   t   factorst   fRk   t	   restartert   APP_ICONt   spyder_argsR   t   is_bootstrapt   resett   this_foldert   spyder_folderRU   t   argst
   args_resett   pythonRj   t	   spyderdirt   commandRl   t	   wait_timet   counterRm   t   command_resett   pt	   pid_reset(    (    s1   lib/python2.7/site-packages/spyder/app/restart.pyR`   œ   sœ    		%		
	t   __main__(.   R^   Rz   R%   t   os.patht   pathRu   R   R}   Rƒ   t   qtpyR    t   qtpy.QtCoreR   R   t
   qtpy.QtGuiR   R   R   t   qtpy.QtWidgetsR   R   R   R	   t   spyder.config.baseR
   R   t   spyder.py3compatR   t   spyder.utils.qthelpersR   t   spyder.config.mainR   t   versiont   PY2R*   R   R‚   RL   RM   RN   R$   R)   R+   R,   R`   R\   (    (    (    s1   lib/python2.7/site-packages/spyder/app/restart.pyt   <module>   s2   "				I	Œ