a
    no]b                     @   sN   d dl mZmZmZmZ d dlmZ d dlmZ ddl	m
Z
 G dd dZdS )	    )AnyDictListOptional)KernelClient)output_from_msg   )
json_cleanc                   @   s   e Zd ZdZeeeef eddddZe	ee
ddddZdd	d
dZdeee ee ee	 ddddZdee ee ee	 ddddZe	eee
ddddZeddddZeddddZdS )OutputWidgetz+This class mimics a front end output widgetN)comm_idstatekernel_clientreturnc                 C   s@   || _ || _|| _|| _d| j  d| _| jd | _d| _d S )Nzcomm-%sasciioutputsF)r   r   r   executorencodeZtopicr   clear_before_next_output)selfr   r   r   r    r   5lib/python3.9/site-packages/nbclient/output_widget.py__init__   s    zOutputWidget.__init__)outsmsg
cell_indexr   c                 C   sV   |d | _ |d }|dr$d| _n.g | _|   t| jdrR| j| jj| j d< d S )Nparent_headercontentwaitTwidget_stater   )	r   getr   r   
sync_statehasattrr   r   r   )r   r   r   r   r   r   r   r   clear_output   s    

zOutputWidget.clear_output)r   c                 C   s$   d| j i}d|g d}| | d S )Nr   update)methodr   Zbuffer_paths)r   send)r   r   r   r   r   r   r    &   s    
zOutputWidget.sync_state)msg_typedatametadatabuffersr   c                 K   sd   |du ri n|}|du ri n|}t tf || jd|}| jjj||| j|d}| jj| dS )z*Helper for sending a comm message on IOPubN)r'   r   )r   parentr(   )	r	   dictr   r   Zsessionr   r   Zshell_channelr%   )r   r&   r'   r(   r)   keysr   r   r   r   r   _publish_msg+   s    	
zOutputWidget._publish_msg)r'   r(   r)   r   c                 C   s   | j d|||d d S )NZcomm_msg)r'   r(   r)   )r-   )r   r'   r(   r)   r   r   r   r%   <   s    zOutputWidget.send)r   r   
display_idr   r   c                 C   s   | j rg | _d| _ |d | _t|}| jr| jd }|d dkrr|d dkrr|d |d krr|d  |d 7  < q| j| n| j| |   t| jdr| j| jj| j	 d	< d S )
NFr   Zoutput_typestreamnametextr   r   )
r   r   r   r   appendr    r!   r   r   r   )r   r   r   r.   r   outputZlast_outputr   r   r   r4   E   s&    



zOutputWidget.output)r   r   c                 C   sF   d|v rB| d}|r,| j||  || _n| j| j|  || _d S )Nmsg_id)r   r   Zregister_output_hookr5   Zremove_output_hook)r   r   r5   r   r   r   	set_state_   s    
zOutputWidget.set_state)r   r   c                 C   s@   |d }|d }|| j ksJ |d }d|v r<| |d  d S )Nr   r   r'   r   )r   r6   )r   r   r   r   r'   r   r   r   
handle_msgi   s    zOutputWidget.handle_msg)NNN)NNN)__name__
__module____qualname____doc__strr   r   r   r   r   intr"   r    r   r-   r%   r4   r6   r7   r   r   r   r   r
   	   s8         	
r
   N)typingr   r   r   r   Zjupyter_client.clientr   Znbformat.v4r   Zjsonutilr	   r
   r   r   r   r   <module>   s   