o
    i                     @   sL   d Z ddlZddlmZmZmZmZmZmZ ddl	m
Z
 G dd de
ZdS )zA basic kernel monitor with autorestarting.

This watches a kernel's state using KernelManager.is_alive and auto
restarts the kernel if it dies.

It is an incomplete base class, and must be subclassed.
    N)BoolDictFloatInstanceIntegerdefault)LoggingConfigurablec                   @   s   e Zd ZdZedZeddddZeddddZ	ed	dd
dZ
eddddZeddddZedZedZedZe Zeddd Ze Zdd Zdd Zdd Zd"ddZd"ddZdd Zdd  Zd!S )#KernelRestarterz!Monitor and autorestart a kernel.zjupyter_client.KernelManagerFTzWhether to include every poll event in debugging output.

        Has to be set explicitly, because there will be *a lot* of output.
        )confighelpg      @z%Kernel heartbeat interval in seconds.g      $@zOThe time in seconds to consider the kernel to have completed a stable start up.   zJThe number of consecutive autorestarts before the kernel is presumed dead.zNWhether to choose new random ports when restarting before the kernel is alive.r   
_last_deadc                 C   s   t   S )N)timeself r   S/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/jupyter_client/restarter.py_default_last_dead6   s   z"KernelRestarter._default_last_deadc                 C   s
   g g dS )N)restartdeadr   r   r   r   r   _callbacks_default<   s   
z"KernelRestarter._callbacks_defaultc                 C      d}t |)z Start the polling of the kernel.!Must be implemented in a subclassNotImplementedErrorr   msgr   r   r   start?      zKernelRestarter.startc                 C   r   )zStop the kernel polling.r   r   r   r   r   r   stopD   r   zKernelRestarter.stopr   c                 C   s   | j | | dS )zregister a callback to fire on a particular event

        Possible values for event:

          'restart' (default): kernel has died, and will be restarted.
          'dead': restart has failed, kernel will be left dead.

        N)	callbacksappendr   feventr   r   r   add_callbackI   s   	zKernelRestarter.add_callbackc                 C   s,   z| j | | W dS  ty   Y dS w )zunregister a callback to fire on a particular event

        Possible values for event:

          'restart' (default): kernel has died, and will be restarted.
          'dead': restart has failed, kernel will be left dead.

        N)r    remove
ValueErrorr"   r   r   r   remove_callbackT   s
   	zKernelRestarter.remove_callbackc              
   C   sD   | j | D ]}z|  W q ty   | jjd||dd Y qw dS )z)fire our callbacks for a particular eventz&KernelRestarter: %s callback %r failedT)exc_infoN)r    	Exceptionlogerror)r   r$   callbackr   r   r   _fire_callbacksb   s   

zKernelRestarter._fire_callbacksc                 C   sP  | j r	| j d | jjr| j d d S t }| j ss|| _| jr,|  jd7  _nd| _| j| j	krL| j
d | d d| _d| _|   d S | joQ| j}| jd| j| j	|r^d	nd
 | d | jjd|d d| _d S | j}| jjr| jjj|d}| jr|| j |krd| _| jr|| j |kr| j d d| _d S d S d S )NzPolling kernel...zKernel shutdown in progress...   zKernelRestarter: restart failedr   Fr   z;KernelRestarter: restarting kernel (%i/%i), %s random portsnewkeepr   T)nownewports)recommendedz-KernelRestarter: restart apparently succeeded)debugr+   kernel_managershutting_downr   is_aliver   _restarting_restart_countrestart_limitwarningr.   r   random_ports_until_alive_initial_startupinforestart_kernelstable_start_timeprovisionerget_stable_start_time)r   r2   r3   rA   r   r   r   pollo   sL   




	
zKernelRestarter.pollN)r   )__name__
__module____qualname____doc__r   r6   r   r5   r   time_to_deadrA   r   r;   r=   r9   r:   r>   r   r   r   r   r    r   r   r   r%   r(   r.   rD   r   r   r   r   r	      sL    	


r	   )rH   r   	traitletsr   r   r   r   r   r   traitlets.config.configurabler   r	   r   r   r   r   <module>   s
    	 