
    Yd                     X    d Z 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      Zy	)
zAn output widget mimic.    )AnyDictListOptional)KernelClient)output_from_msg   )
json_cleanc                       e Zd ZdZdedeeef   dededdf
dZd	e	d
ede
ddfdZddZ	 	 	 ddedee   dee   dee	   deddfdZ	 	 	 ddee   dee   dee	   ddfdZd	e	d
edede
ddf
dZdeddfdZd
eddfdZy)OutputWidgetz+This class mimics a front end output widgetcomm_idstatekernel_clientexecutorreturnNc                     || _         || _        || _        || _        d| j                   z  j	                  d      | _        | j                  d   | _        d| _        y)zInitialize the widget.zcomm-%sasciioutputsFN)r   r   r   r   encodetopicr   clear_before_next_output)selfr   r   r   r   s        8/usr/lib/python3/dist-packages/nbclient/output_widget.py__init__zOutputWidget.__init__   sT     $%*
+8 &5==gF
!ZZ	2.3%    outsmsg
cell_indexc                    |d   | _         |d   }|j                  d      rd| _        yg | _        | j	                          t        | j                  d      r1| j                  | j                  j                  | j                     d<   yy)zClear output.parent_headercontentwaitTwidget_stater   N)	r    getr   r   
sync_statehasattrr   r#   r   )r   r   r   r   r!   s        r   clear_outputzOutputWidget.clear_output   sq     1i.;;v,0D)DLOOt}}n5FJll**4<<8C 6r   c                 N    d| j                   i}d|g d}| j                  |       y)zSync state.r   update)methodr   buffer_pathsN)r   send)r   r   r   s      r   r%   zOutputWidget.sync_state'   s'    DLL)!E2F		#r   msg_typedatametadatabufferskeysc                    |i n|}|i n|}t        t        d|| j                  d|      }| j                  j                  j                  ||| j                  |      }| j                  j                  j                  |       y)z*Helper for sending a comm message on IOPubN)r.   r   )r!   parentr/    )	r
   dictr   r   sessionr   r    shell_channelr,   )r   r-   r.   r/   r0   r1   r!   r   s           r   _publish_msgzOutputWidget._publish_msg-   s     \rt!)2xTJtT\\JTJK  ((,,gd.@.@8 - 
 	((--c2r   c                 .    | j                  d|||       y)zSend a comm message.comm_msg)r.   r/   r0   N)r8   )r   r.   r/   r0   s       r   r,   zOutputWidget.send>   s     	*4(GTr   
display_idc                    | j                   rg | _        d| _         |d   | _        t        |      }| j                  rW| j                  d   }|d   dk(  r$|d   dk(  r|d   |d   k(  r|dxx   |d   z  cc<   n7| j                  j	                  |       n| j                  j	                  |       | j                          t        | j                  d      r1| j                  | j                  j                  | j                     d	<   y
y
)zHandle output.Fr    output_typestreamnametextr#   r   N)
r   r   r    r   appendr%   r&   r   r#   r   )r   r   r   r;   r   outputlast_outputs          r   rC   zOutputWidget.outputG   s    ((DL,1D) 1 %<<,,r*KM*h6=)X5'6&>9F#vf~5###F+LL'4==.1BF,,DMM&&t||4Y? 2r   c                     d|v re|j                  d      }|r$| j                  j                  ||        || _        y| j                  j	                  | j                  |        || _        yy)zSet the state.msg_idN)r$   r   register_output_hookrF   remove_output_hook)r   r   rF   s      r   	set_statezOutputWidget.set_statea   sZ    uYYx(F2264@$00dC$ r   c                     |d   }|d   }|| j                   k7  rt        d      |d   }d|v r| j                  |d          yy)zHandle a message.r!   r   zMismatched comm idr.   r   N)r   AssertionErrorrI   )r   r   r!   r   r.   s        r   
handle_msgzOutputWidget.handle_msgl   sR    i.)$dll" !566vd?NN4=) r   )r   N)NNN)__name__
__module____qualname____doc__strr   r   r   r   r   intr'   r%   r   r8   r,   rC   rI   rL   r4   r   r   r   r   
   sW   5
4
4#'S>
4BN
4Z]
4	
4S SD Sc Sd S  $#'"&33 tn3 4.	3
 $3 3 
3&  $#'"&	UtnU 4.U $	U
 
UO4 Od O O OQU O4	%t 	% 	%*d *t *r   r   N)rP   typingr   r   r   r   jupyter_client.clientr   nbformat.v4r   jsonutilr
   r   r4   r   r   <module>rW      s#     , , . '  j* j*r   