ó
Ýà‹]c           @   sX   d  Z  d d l m Z d d l m Z m Z m Z m Z m Z d e f d „  ƒ  YZ	 d S(   sÊ   A 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.
iÿÿÿÿ(   t   LoggingConfigurable(   t   Instancet   Floatt   Dictt   Boolt   Integert   KernelRestarterc           B   sì   e  Z d  Z e d ƒ Z e e d e d d ƒZ e	 d d e d d ƒZ
 e d d e d d ƒZ e e d e d d	 ƒZ e e ƒ Z e d
 ƒ Z e e ƒ Z e ƒ  Z d „  Z d „  Z d „  Z d d „ Z d d „ Z d „  Z d „  Z RS(   s!   Monitor and autorestart a kernel.s   jupyter_client.KernelManagert   configt   helps   Whether to include every poll event in debugging output.

        Has to be set explicitly, because there will be *a lot* of output.
        g      @s%   Kernel heartbeat interval in seconds.i   sJ   The number of consecutive autorestarts before the kernel is presumed dead.sN   Whether to choose new random ports when restarting before the kernel is alive.i    c         C   s   t  d g  d g  ƒ S(   Nt   restartt   dead(   t   dict(   t   self(    (    s7   lib/python2.7/site-packages/jupyter_client/restarter.pyt   _callbacks_default.   s    c         C   s   t  d ƒ ‚ d S(   s    Start the polling of the kernel.s!   Must be implemented in a subclassN(   t   NotImplementedError(   R   (    (    s7   lib/python2.7/site-packages/jupyter_client/restarter.pyt   start1   s    c         C   s   t  d ƒ ‚ d S(   s   Stop the kernel polling.s!   Must be implemented in a subclassN(   R   (   R   (    (    s7   lib/python2.7/site-packages/jupyter_client/restarter.pyt   stop5   s    R	   c         C   s   |  j  | j | ƒ d S(   sç   register 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(   t	   callbackst   append(   R   t   ft   event(    (    s7   lib/python2.7/site-packages/jupyter_client/restarter.pyt   add_callback9   s    	c         C   s0   y |  j  | j | ƒ Wn t k
 r+ n Xd S(   sé   unregister 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   t   removet
   ValueError(   R   R   R   (    (    s7   lib/python2.7/site-packages/jupyter_client/restarter.pyt   remove_callbackD   s    	c         C   sY   xR |  j  | D]C } y | ƒ  Wq t k
 rP } |  j j d | | d t ƒq Xq Wd S(   s)   fire our callbacks for a particular events&   KernelRestarter: %s callback %r failedt   exc_infoN(   R   t	   Exceptiont   logt   errort   True(   R   R   t   callbackt   e(    (    s7   lib/python2.7/site-packages/jupyter_client/restarter.pyt   _fire_callbacksR   s
    c         C   sJ  |  j  r |  j j  d ƒ n  |  j j ƒ  s|  j rF |  j d 7_ n	 d |  _ |  j |  j k r |  j j d ƒ |  j d ƒ t	 |  _ d |  _ |  j
 ƒ  qF|  j o¬ |  j } |  j j d |  j |  j | rÓ d n d ƒ |  j d	 ƒ |  j j d
 t d | ƒ t |  _ n: |  j r!t	 |  _ n  |  j r=|  j j  d ƒ n  t	 |  _ d  S(   Ns   Polling kernel...i   s   KernelRestarter: restart failedR
   i    s;   KernelRestarter: restarting kernel (%i/%i), %s random portst   newt   keepR	   t   nowt   newportss-   KernelRestarter: restart apparently succeeded(   t   debugR   t   kernel_managert   is_alivet   _restartingt   _restart_countt   restart_limitt   warningR    t   FalseR   t   random_ports_until_alivet   _initial_startupt   infot   restart_kernelR   (   R   R$   (    (    s7   lib/python2.7/site-packages/jupyter_client/restarter.pyt   pollZ   s2    							(   t   __name__t
   __module__t   __doc__R   R&   R   R,   R   R%   R   t   time_to_deadR   R*   R-   R(   R)   R.   R   R   R   R   R   R   R   R    R1   (    (    (    s7   lib/python2.7/site-packages/jupyter_client/restarter.pyR      s*   									N(
   R4   t   traitlets.config.configurableR    t	   traitletsR   R   R   R   R   R   (    (    (    s7   lib/python2.7/site-packages/jupyter_client/restarter.pyt   <module>   s   (