o
    i                     @   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dedeeef dededdf
dd	Zd
e	dede
ddfddZd!ddZ			d"dedee dee dee	 deddfddZ			d"dee dee dee	 ddfddZd
e	dedede
ddf
ddZdeddfddZdeddfdd ZdS )#OutputWidgetz+This class mimics a front end output widgetcomm_idstatekernel_clientexecutorreturnNc                 C   s@   || _ || _|| _|| _d| j  d| _| jd | _d| _d S )Nzcomm-%sasciioutputsF)r   r   r   r   encodetopicr   clear_before_next_output)selfr   r   r   r    r   Q/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/nbclient/output_widget.py__init__   s   
zOutputWidget.__init__outsmsg
cell_indexc                 C   s\   |d | _ |d }|drd| _d S g | _|   t| jdr,| j| jj| j d< d S 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_outputc                 C   s$   d| j i}d|g d}| | d S )Nr   update)methodr   buffer_paths)r   send)r   r   r   r   r   r   r!   &   s   
zOutputWidget.sync_statemsg_typedatametadatabufferskeysc                 K   sd   |du ri n|}|du ri n|}t td|| 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   )	r	   dictr   r   sessionr   r   shell_channelr'   )r   r(   r)   r*   r+   r,   r   r   r   r   r   _publish_msg+   s   	
zOutputWidget._publish_msgc                 C   s   | j d|||d d S )Ncomm_msg)r)   r*   r+   )r1   )r   r)   r*   r+   r   r   r   r'   <   s   zOutputWidget.send
display_idc                 C   s   | j r	g | _d| _ |d | _t|}| jr@| jd }|d dkr9|d dkr9|d |d kr9|d  |d 7  < n| j| n| j| |   t| jdr\| j| jj| j	 d	< d S d S )
NFr   output_typestreamnametextr   r   )
r   r   r   r   appendr!   r"   r   r   r   )r   r   r   r3   r   outputlast_outputr   r   r   r:   E   s"   

zOutputWidget.outputc                 C   sL   d|v r$| d}|r| j||  || _d S | j| j|  || _d S d S )Nmsg_id)r    r   register_output_hookr<   remove_output_hook)r   r   r<   r   r   r   	set_state_   s   


zOutputWidget.set_statec                 C   sD   |d }|d }|| j ksJ |d }d|v r | |d  d S d S )Nr   r   r)   r   )r   r?   )r   r   r   r   r)   r   r   r   
handle_msgi   s   zOutputWidget.handle_msg)r   N)NNN)__name__
__module____qualname____doc__strr   r   r   r   r   intr#   r!   r   r1   r'   r:   r?   r@   r   r   r   r   r
   	   s\    




	
r
   N)typingr   r   r   r   jupyter_client.clientr   nbformat.v4r   jsonutilr	   r
   r   r   r   r   <module>   s
    