B
    ‹æ@\&  ã               @   sr   d dl mZmZmZmZ d dlZe e¡Zd dl	Z	ddl
mZ ddlmZ ddlmZmZ dZG dd	„ d	eƒZdS )
é    )Úabsolute_importÚdivisionÚprint_functionÚunicode_literalsNé   )Ú
CodeRunner)ÚHandler)Ú
set_curdocÚcurdoc)ÚExampleHandlerc                   sn   e Zd ZdZdddgZddgZ‡ fdd„Zd	d
„ Zdd„ Zdd„ Z	e
dd„ ƒZe
dd„ ƒZe
dd„ ƒZ‡  ZS )r   zj A stripped-down handler similar to CodeHandler but that does
    some appropriate monkeypatching to

    Zoutput_notebookZoutput_fileZreset_outputZshowZsavec                s"   t t| ƒ | ¡ t||g ƒ| _d S )N)Úsuperr   Ú__init__r   Ú_runner)ÚselfÚsourceÚfilename)Ú	__class__© ú>lib/python3.7/site-packages/bokeh/sphinxext/example_handler.pyr   7   s    zExampleHandler.__init__c          
   C   sx   | j r
d S | j ¡ }|tj|j< |j |¡ tƒ }t	|ƒ |  
¡ \}}z| j |dd„ ¡ W d |  ||¡ t	|ƒ X d S )Nc               S   s   d S )Nr   r   r   r   r   Ú<lambda>J   s    z0ExampleHandler.modify_document.<locals>.<lambda>)Úfailedr   Z
new_moduleÚsysÚmodulesÚ__name__Z_modulesÚappendr
   r	   Ú_monkeypatchÚrunÚ_unmonkeypatch)r   ÚdocÚmoduleÚold_docÚold_ior   r   r   Úmodify_document;   s    
zExampleHandler.modify_documentc             C   sÆ   dd„ }dd„ }dd„ }dd l m} dd lm} ||g}i }x"| j| j D ]}t||ƒ||< qJW xD|D ]<}	x| jD ]}t|	||ƒ qrW x| jD ]}t|	||ƒ qŽW qfW dd lm	}
 |
j
}||
_
||fS )Nc              _   s   d S )Nr   )ÚargsÚkwr   r   r   Ú_passQ   s    z*ExampleHandler._monkeypatch.<locals>._passc             _   s   ddl m} |ƒ  | ¡ d S )Nr   )r
   )Úbokeh.ior
   Zadd_root)Úobjr#   r$   r
   r   r   r   Ú	_add_rootR   s    z.ExampleHandler._monkeypatch.<locals>._add_rootc              _   s   t ƒ S )N)r
   )r#   r$   r   r   r   Ú_curdocU   s    z,ExampleHandler._monkeypatch.<locals>._curdocr   )r&   ÚioÚbokeh.plottingÚplottingÚ_output_funcsÚ	_io_funcsÚgetattrÚsetattrÚbokeh.documentÚdocumentÚDocument)r   r%   r(   r)   r*   ÚpÚmodsr!   ÚfÚmodÚdr    r   r   r   r   O   s$    
zExampleHandler._monkeypatchc       	      C   sb   dd l m} dd lm} ||g}x*|D ]"}x|D ]}t|||| ƒ q0W q&W dd lm} ||_d S )Nr   )r&   r*   r+   r,   r0   r1   r2   r3   )	r   r!   r    r*   r4   r5   r7   r6   r8   r   r   r   r   p   s    

zExampleHandler._unmonkeypatchc             C   s   | j jS )N)r   r   )r   r   r   r   r   |   s    zExampleHandler.failedc             C   s   | j jS )N)r   Úerror)r   r   r   r   r9   €   s    zExampleHandler.errorc             C   s   | j jS )N)r   Úerror_detail)r   r   r   r   r:   „   s    zExampleHandler.error_detail)r   Ú
__module__Ú__qualname__Ú__doc__r-   r.   r   r"   r   r   Úpropertyr   r9   r:   Ú__classcell__r   r   )r   r   r   .   s   
!r   )Z
__future__r   r   r   r   ZloggingZ	getLoggerr   Úlogr   Z application.handlers.code_runnerr   Zapplication.handlers.handlerr   Zio.docr	   r
   Ú__all__r   r   r   r   r   Ú<module>   s   
