U
    ҥch                     @   sv   d Z ddlZddlZddlmZ ddlmZmZ ddlm	Z	m
Z
mZ ddlmZmZ G dd dZG d	d
 d
eZdS )z7Replacements for sys.displayhook that publish over ZMQ.    N)DisplayHook)Sessionextract_header)AnyDictInstance)encode_images
json_cleanc                   @   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 )zInitialize the hook.N)session
pub_socketparent_header)selfr   r    r   4lib/python3.8/site-packages/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 )zHandle a hook call.Nz
text/plain)execution_countdatametadataexecute_result)parentident)builtins_sysstdoutflushstderrr   reprr   sendr   r   topic)r   objcontentsr   r   r   __call__    s     


    zZMQDisplayHook.__call__c                 C   s   t || _dS )zSet the parent header.Nr   r   r   r   r   r   r   
set_parent1   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)Z
allow_nonec                 C   s   t || _dS )z%Set the parent for outbound messages.Nr&   r'   r   r   r   r(   A   s    zZMQShellDisplayHook.set_parentc                 C   s    | j jdi i d| jd| _dS )zStart the display hook.r   )r   r   )r   N)r   msgr   r   r   r   r   start_displayhookE   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_promptP   s    z'ZMQShellDisplayHook.write_output_promptc                 C   s(   t t|| jd d< || jd d< dS )z!Write format data to the message.r0   r   r   N)r	   r   r.   )r   Zformat_dictZmd_dictr   r   r   write_format_dataT   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.r0   r   )r   N)	r   r   r   r   r.   r   r!   r   r"   r   r   r   r   finish_displayhookY   s
    

z&ZMQShellDisplayHook.finish_displayhook)N)r)   r*   r+   r,   r"   r   r   r   r   r   r   r   r(   r/   r1   r2   r3   r   r   r   r   r-   6   s   

r-   )r,   r   r   ZIPython.core.displayhookr   Zjupyter_client.sessionr   r   Z	traitletsr   r   r   Zipykernel.jsonutilr   r	   r
   r-   r   r   r   r   <module>   s   &