U
    eL                     @  s   d Z ddlmZ ddl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.    )annotationsN)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_parent3   s    zZMQDisplayHook.set_parentN)	__name__
__module____qualname____doc__r#   r   r   r&   r)   r   r   r   r   r      s   r   c                   @  sf   e Zd ZU dZdZeeddZeddZ	e
i Zded< 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_nonezdict[str, t.Any] | Nonemsgc                 C  s   t || _dS )z%Set the parent for outbound messages.Nr'   r(   r   r   r   r)   D   s    zZMQShellDisplayHook.set_parentc                 C  s&   | j r"| j jdi i d| jd| _dS )zStart the display hook.r   )r   r   )r   N)r   r/   r   r   r   r   r   start_displayhookH   s    z%ZMQShellDisplayHook.start_displayhookc                 C  s   | j r| j| j d d< dS )zWrite the output prompt.contentr   N)r/   Zprompt_countr   r   r   r   write_output_promptT   s    z'ZMQShellDisplayHook.write_output_promptc                 C  s.   | j r*tt|| j d d< || j d d< dS )z!Write format data to the message.r1   r   r   N)r/   r
   r	   )r   Zformat_dictZmd_dictr   r   r   write_format_dataY   s    z%ZMQShellDisplayHook.write_format_datac                 C  sP   t j  t j  | jrF| jd d rF| jrF| jj| j| j| jd d| _dS )z%Finish up all displayhook activities.r1   r   )r   N)	r   r   r   r    r/   r   r"   r   r#   r   r   r   r   finish_displayhook_   s
    

z&ZMQShellDisplayHook.finish_displayhook)N)r*   r+   r,   r-   r#   r   r   r   r   r   r   r   __annotations__r)   r0   r2   r3   r4   r   r   r   r   r.   8   s   


r.   )r-   Z
__future__r   r   r   typingtZIPython.core.displayhookr   Zjupyter_client.sessionr   r   Z	traitletsr   r   r   Zipykernel.jsonutilr	   r
   r   r.   r   r   r   r   <module>   s   &