B
    ac
                 @   sx   d Z ddlZddlmZ ddlmZ ddlmZ ddlm	Z	m
Z
mZ ddlmZmZ G dd	 d	eZG d
d deZdS )z7Replacements for sys.displayhook that publish over ZMQ.    N)DisplayHook)encode_images)builtin_mod)InstanceDictAny)extract_headerSessionc               @   s4   e Zd ZdZdZdd Zdd Zdd Zd	d
 ZdS )ZMQDisplayHookzOA simple displayhook that publishes the object's repr over a ZeroMQ
    socket.s   execute_resultc             C   s   || _ || _i | _d S )N)session
pub_socketparent_header)selfr   r    r   9/tmp/pip-unpacked-wheel-4kvctoso/ipykernel/displayhook.py__init__   s    zZMQDisplayHook.__init__c             C   s   dS )z$This method is replaced in kernelappr   r   )r   r   r   r   get_execution_count   s    z"ZMQDisplayHook.get_execution_countc             C   s^   |d krd S |t _tj  tj  |  dt|ii d}| jj	| j
d|| j| jd d S )Nz
text/plain)execution_countdatametadataexecute_result)parentident)r   _sysstdoutflushstderrr   reprr   sendr   r   topic)r   objcontentsr   r   r   __call__   s    


zZMQDisplayHook.__call__c             C   s   t || _d S )N)r   r   )r   r   r   r   r   
set_parent*   s    zZMQDisplayHook.set_parentN)	__name__
__module____qualname____doc__r    r   r   r#   r$   r   r   r   r   r
      s   r
   c               @   s\   e Zd ZdZdZeeddZeddZ	e
i Zdd Zdd Zd	d
 ZdddZdd ZdS )ZMQShellDisplayHookzA displayhook subclass that publishes data using ZeroMQ. This is intended
    to work with an InteractiveShell instance. It sends a dict of different
    representations of the object.NT)
allow_nonec             C   s   t || _dS )z%Set the parent for outbound messages.N)r   r   )r   r   r   r   r   r$   8   s    zZMQShellDisplayHook.set_parentc             C   s    | j jdi i d| jd| _d S )Nr   )r   r   )r   )r   msgr   )r   r   r   r   start_displayhook<   s    z%ZMQShellDisplayHook.start_displayhookc             C   s   | j | jd d< dS )zWrite the output prompt.contentr   N)Zprompt_countr+   )r   r   r   r   write_output_promptB   s    z'ZMQShellDisplayHook.write_output_promptc             C   s$   t || jd d< || jd d< d S )Nr-   r   r   )r   r+   )r   Zformat_dictZmd_dictr   r   r   write_format_dataF   s    z%ZMQShellDisplayHook.write_format_datac             C   sD   t j  t j  | jd d r:| jj| j| j| jd d| _dS )z%Finish up all displayhook activities.r-   r   )r   N)	r   r   r   r   r+   r   r   r   r    )r   r   r   r   finish_displayhookJ   s
    

z&ZMQShellDisplayHook.finish_displayhook)N)r%   r&   r'   r(   r    r   r	   r   r   r   r   r   r$   r,   r.   r/   r0   r   r   r   r   r)   .   s   

r)   )r(   r   ZIPython.core.displayhookr   Zipykernel.jsonutilr   Zipython_genutils.py3compatr   Z	traitletsr   r   r   Zjupyter_client.sessionr   r	   objectr
   r)   r   r   r   r   <module>   s   