B
    @\                 @   s   d Z ddlmZmZmZmZ ddlZeeZ	ddl
mZ ddlmZ dZG dd	 d	eZG d
d deZG dd deZG dd deZG dd deZdS )zf Provide classes to represent callback code that can be associate with
Bokeh Documents and Sessions.

    )absolute_importdivisionprint_functionunicode_literalsN   )make_id)_CallbackGroup)NextTickCallbackPeriodicCallbackSessionCallbackTimeoutCallbackc               @   s:   e Zd ZdZdddZedd Zedd Zd	d
 ZdS )r   zZ A base class for callback objects associated with Bokeh Documents
    and Sessions.

    Nc             C   s$   |dkrt  n|| _|| _|| _dS )z

         Args:
            document (Document) :

            callback (callable) :

            id (str, optional) :

        N)r   _id	_document	_callback)selfdocumentcallbackid r   5lib/python3.7/site-packages/bokeh/server/callbacks.py__init__4   s    zSessionCallback.__init__c             C   s   | j S )z( A unique ID for this callback

        )r   )r   r   r   r   r   C   s    zSessionCallback.idc             C   s   | j S )z1 The callable that this callback wraps.

        )r   )r   r   r   r   r   J   s    zSessionCallback.callbackc             C   s   t ddS )z4 Dev API used to wrap the callback with decorators. _copy_with_changed_callbackN)NotImplementedError)r   new_callbackr   r   r   r   Q   s    z+SessionCallback._copy_with_changed_callback)N)	__name__
__module____qualname____doc__r   propertyr   r   r   r   r   r   r   r   /   s
   
r   c                   s*   e Zd ZdZd fdd	Zdd Z  ZS )r	   zE Represent a callback to execute on the next ``IOLoop`` "tick".

    Nc                s   t t| ||| dS )z

         Args:
            document (Document) :

            callback (callable) :

            id (str, optional) :

        N)superr	   r   )r   r   r   r   )	__class__r   r   r   ]   s    zNextTickCallback.__init__c             C   s   t | j|| jS )z4 Dev API used to wrap the callback with decorators. )r	   r   r   )r   r   r   r   r   r   j   s    z,NextTickCallback._copy_with_changed_callback)N)r   r   r   r   r   r   __classcell__r   r   )r    r   r	   Y   s   r	   c                   s6   e Zd ZdZd	 fdd	Zedd Zdd Z  ZS )
r
   zp Represent a callback to execute periodically on the ``IOLoop`` at a
    specified periodic time interval.

    Nc                s   t t| ||| || _dS )z

        Args:
            document (Document) :

            callback (callable) :

            period (int) :

            id (str, optional) :

        N)r   r
   r   _period)r   r   r   periodr   )r    r   r   r   s   s    zPeriodicCallback.__init__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.periodc             C   s   t | j|| j| jS )z4 Dev API used to wrap the callback with decorators. )r
   r   r"   r   )r   r   r   r   r   r      s    z,PeriodicCallback._copy_with_changed_callback)N)	r   r   r   r   r   r   r#   r   r!   r   r   )r    r   r
   n   s   r
   c                   s6   e Zd ZdZd	 fdd	Zedd Zdd Z  ZS )
r   zi Represent a callback to execute once on the ``IOLoop`` after a specified
    time interval passes.

    Nc                s   t t| ||| || _dS )z

        Args:
            document (Document) :

            callback (callable) :

            timeout (int) :

            id (str, optional) :

        N)r   r   r   _timeout)r   r   r   timeoutr   )r    r   r   r      s    zTimeoutCallback.__init__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.timeoutc             C   s   t | j|| j| jS )z4 Dev API used to wrap the callback with decorators. )r   r   r$   r   )r   r   r   r   r   r      s    z+TimeoutCallback._copy_with_changed_callback)N)	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Zdd Zdd Zd	d
 Zdd ZdS )_DocumentCallbackGroupz

    Nc             C   s   t || _dS )z


        N)r   _group)r   Zio_loopr   r   r   r      s    z_DocumentCallbackGroup.__init__c             C   s   | j   dS )z


        N)r'   remove_all_callbacks)r   r   r   r   r(      s    z+_DocumentCallbackGroup.remove_all_callbacksc             C   s   x|D ]}|  | qW dS )z


        N)add_session_callback)r   Z	callbackscbr   r   r   add_session_callbacks   s    
z,_DocumentCallbackGroup.add_session_callbacksc             C   st   t |tr"| j|j|j|j nNt |trD| j|j|j	|j n,t |t
rb| j|j|j ntd|j dS )z


        zVExpected callback of type PeriodicCallback, TimeoutCallback, NextTickCallback, got: %sN)
isinstancer
   r'   Zadd_periodic_callbackr   r#   r   r   Zadd_timeout_callbackr%   r	   Zadd_next_tick_callback
ValueError)r   callback_objr   r   r   r)      s    


z+_DocumentCallbackGroup.add_session_callbackc             C   sj   yPt |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 )z


        N)
r,   r
   r'   Zremove_periodic_callbackr   r   Zremove_timeout_callbackr	   Zremove_next_tick_callbackr-   )r   r.   r   r   r   remove_session_callback   s    	


z._DocumentCallbackGroup.remove_session_callback)N)	r   r   r   r   r   r(   r+   r)   r/   r   r   r   r   r&      s   
r&   )r   Z
__future__r   r   r   r   ZloggingZ	getLoggerr   logZutil.serializationr   Zutil.tornador   __all__objectr   r	   r
   r   r&   r   r   r   r   <module>
   s   

*!$