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dS )aY   Provide a Bokeh Application Handler to build up documents by running
a specified Python function.

This Handler is not used by the Bokeh server command line tool, but is often
useful if users wish to embed the Bokeh server programmatically:

.. code-block:: python

    def make_doc(doc):

        # do work to modify the document, add plots, widgets, etc.

        return doc

    app = Application(FunctionHandler(make_doc))

    server = Server({'/bkapp': app}, io_loop=IOLoop.current())

    server.start()

For complete examples of this technique, see
:bokeh-tree:`examples/howto/server_embed`

é    )Úabsolute_importÚdivisionÚprint_functionÚunicode_literalsNé   )Ú_check_callbacké   )ÚHandler)ÚFunctionHandlerc                   s4   e Zd ZdZ‡ fdd„Zedd„ ƒZdd„ Z‡  ZS )r
   a>   A Handler that accepts a plain python function to use for modifying
    Bokeh Documents.

    For example, the following code configures a handler with a function that
    adds an empty plot to a Document:

    .. code-block:: python

        def add_empty_plot(doc):
            p = figure(x_range=(0,10), y_range=(0, 10))
            doc.add_root(p)
            return doc

        handler = FunctionHandler(add_empty_plot)

    This handler could be configured on an Application, and the Application
    would run this function every time a new session is created.

    c                s(   t t| ƒ ¡  t|dƒ || _d| _dS )a§  

        Args:
            func (callable) : a function to modify and return a Bokeh Document.
                The function should have the form:

                .. code-block:: python

                    def func(doc):
                        # modify doc
                        return doc

                and it  should return the passed-in document after making any
                modifications in-place.

        )ÚdocTN)Úsuperr
   Ú__init__r   Ú_funcÚ_safe_to_fork)ÚselfÚfunc)Ú	__class__© úBlib/python3.7/site-packages/bokeh/application/handlers/function.pyr   Y   s    
zFunctionHandler.__init__c             C   s   | j S )z‹ Whether it is still safe for the Bokeh server to fork new workers.

        ``False`` if ``modify_doc`` has already been called.

        )r   )r   r   r   r   Úsafe_to_forks   s    zFunctionHandler.safe_to_forkc             C   s   |   |¡ d| _dS )z  Execute the configured ``func`` to modify the document.

        After this method is first executed, ``safe_to_fork`` will return
        ``False``.

        FN)r   r   )r   r   r   r   r   Úmodify_document~   s    
zFunctionHandler.modify_document)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úpropertyr   r   Ú__classcell__r   r   )r   r   r
   D   s   r
   )r   Z
__future__r   r   r   r   ZloggingZ	getLoggerr   ÚlogZutil.callback_managerr   Zhandlerr	   Ú__all__r
   r   r   r   r   Ú<module>   s   
