U
    /eA                     @  s   d Z ddlmZ ddlZeeZddlmZm	Z	m
Z
 ddlmZ ddlmZ er^ddlmZ d	Ze	g df ZG d
d dZG dd deZG dd deZG dd deZG dd dZdS )zf Provide classes to represent callback code that can be associate with
Bokeh Documents and Sessions.

    )annotationsN)TYPE_CHECKINGCallableSequence   )ID)_CallbackGroup)IOLoop)NextTickCallbackPeriodicCallbackSessionCallbackTimeoutCallbackc                   @  sP   e Zd ZU dZded< ddddddZedd	d
dZedd	ddZdS )r   zZ A base class for callback objects associated with Bokeh Documents
    and Sessions.

    r   _idCallbackNonecallbackcallback_idreturnc                C  s   || _ || _dS )S

         Args:
            callback (callable) :

            id (ID) :

        N)r   	_callbackselfr   r    r   :/tmp/pip-unpacked-wheel-f5fndrjf/bokeh/server/callbacks.py__init__;   s    	zSessionCallback.__init__r   c                 C  s   | j S )z( A unique ID for this callback

        )r   r   r   r   r   idI   s    zSessionCallback.idc                 C  s   | j S )z1 The callable that this callback wraps.

        )r   r   r   r   r   r   P   s    zSessionCallback.callbackN)	__name__
__module____qualname____doc____annotations__r   propertyr   r   r   r   r   r   r   3   s   
r   c                      s*   e Zd ZdZdddd fddZ  ZS )r
   zE Represent a callback to execute on the next ``IOLoop`` "tick".

    r   r   r   r   c                  s   t  j||d dS )r   r   r   N)superr   r   	__class__r   r   r   _   s    	zNextTickCallback.__init__)r   r    r!   r"   r   __classcell__r   r   r'   r   r
   [   s   r
   c                      sH   e Zd ZU dZded< ddddd fdd	Zedd
ddZ  ZS )r   zp Represent a callback to execute periodically on the ``IOLoop`` at a
    specified periodic time interval.

    int_periodr   r   r   )r   periodr   r   c                  s   t  j||d || _dS )zn

        Args:
            callback (callable) :

            period (int) :

            id (ID) :

        r%   N)r&   r   r+   )r   r   r,   r   r'   r   r   r   r   s    zPeriodicCallback.__init__r   c                 C  s   | j S )zc The period time (in milliseconds) that this callback should
        repeat execution at.

        )r+   r   r   r   r   r,      s    zPeriodicCallback.period)	r   r    r!   r"   r#   r   r$   r,   r)   r   r   r'   r   r   j   s
   
r   c                      sH   e Zd ZU dZded< ddddd fdd	Zedd
ddZ  ZS )r   zi Represent a callback to execute once on the ``IOLoop`` after a specified
    time interval passes.

    r*   _timeoutr   r   r   )r   timeoutr   r   c                  s   t  j||d || _dS )zo

        Args:
            callback (callable) :

            timeout (int) :

            id (ID) :

        r%   N)r&   r   r-   )r   r   r.   r   r'   r   r   r      s    zTimeoutCallback.__init__r   c                 C  s   | j S )zL The timeout (in milliseconds) that the callback should run after.

        )r-   r   r   r   r   r.      s    zTimeoutCallback.timeout)	r   r    r!   r"   r#   r   r$   r.   r)   r   r   r'   r   r      s
   
r   c                   @  s^   e Zd ZdZdddddZdddd	Zd
ddddZdddddZdddddZdS )DocumentCallbackGroupz

    r	   r   )io_loopr   c                 C  s   t || _dS 


        N)r   _group)r   r0   r   r   r   r      s    zDocumentCallbackGroup.__init__r   c                 C  s   | j   dS r1   )r3   remove_all_callbacksr   r   r   r   r4      s    z*DocumentCallbackGroup.remove_all_callbackszSequence[SessionCallback])	callbacksr   c                 C  s   |D ]}|  | qdS r1   )add_session_callback)r   r5   cbr   r   r   add_session_callbacks   s    z+DocumentCallbackGroup.add_session_callbacksr   )callback_objr   c                 C  sv   t |tr"| j|j|j|j nPt |trD| j|j|j	|j n.t |t
rb| j|j|j ntd|j dS )r2   zTExpected callback of type PeriodicCallback, TimeoutCallback, NextTickCallback, got: N)
isinstancer   r3   Zadd_periodic_callbackr   r,   r   r   Zadd_timeout_callbackr.   r
   Zadd_next_tick_callback
ValueErrorr   r9   r   r   r   r6      s    


z*DocumentCallbackGroup.add_session_callbackc                 C  sj   zPt |tr| j|j n2t |tr6| j|j nt |trN| j|j W n t	k
rd   Y nX dS r1   )
r:   r   r3   Zremove_periodic_callbackr   r   Zremove_timeout_callbackr
   Zremove_next_tick_callbackr;   r<   r   r   r   remove_session_callback   s    	


z-DocumentCallbackGroup.remove_session_callbackN)	r   r    r!   r"   r   r4   r8   r6   r=   r   r   r   r   r/      s   r/   )r"   
__future__r   logging	getLoggerr   logtypingr   r   r   Z
core.typesr   Zutil.tornador   Ztornado.ioloopr	   __all__r   r   r
   r   r   r/   r   r   r   r   <module>   s   
(!