
    bi8              	          d Z ddlZddlZddlmZ ddlmZ dedede	eef   fd	Z
 ej                  d
ej                        Z ej                  dej                        Z ej                  dej                  ej                  z        ZdededefdZ G d d      Zdedee   fdZ G d de      Z G d de      Zed   fdeeef   dedeeef   fdZ e        e       dZy)z'Adapters for Jupyter msg spec versions.    N)Any   )protocol_version_infocode
cursor_posreturnc                 p    | sy| j                  d      D ]  }t        |      }||kD  r||z  } ||fS  |fS )zTurn a multiline code block and cursor position into a single line
    and new cursor position.

    For adapting ``complete_`` and ``object_info_request``.
    ) r   T)
splitlineslen)r   r   linens       Q/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/jupyter_client/adapter.pycode_to_liner      sV     % I>!OJ     z\([^\(\)]+\)z	\([^\(]*$z[a-z_][0-9a-z._]*c                     t        | |      \  }}|}t        j                  d|      }||k7  r|}t        j                  d|      }||k7  rt        j                  d|      }t        j                  |      }|r|d   S y)ztReimplement token-finding logic from IPython 2.x javascript

    for adapting object_info_request from v5 to v4
    r
   )r   _match_bracketsub_end_bracket_identifierfindall)r   r   r   _oldlinematchess         r   extract_oname_v4r   "   s     4,GD!Gb$'D
T/!!"d+ T/
 B%D!!$'Gr{r   c                       e Zd ZU dZi Zeeef   ed<   deeef   deeef   fdZ	deeef   deeef   fdZ
deeef   deeef   fdZdeeef   deeef   fdZdeeef   deeef   fd	Zy
)AdapterzaBase class for adapting messages

    Override message_type(msg) methods to create adapters.
    msg_type_mapmsgr   c                     |S )Update the header. selfr    s     r   update_headerzAdapter.update_headerA       
r   c                     |S )zUpdate the metadata.r#   r$   s     r   update_metadatazAdapter.update_metadataE   r'   r   c                 d    |d   }|d   }|| j                   v r| j                   |   x|d<   |d<   |S )zUpdate the message type.headermsg_type)r   )r%   r    r+   r,   s       r   update_msg_typezAdapter.update_msg_typeI   sF    X*%t(((373D3DX3NNC
OfZ0
r   c                     |S )zeThis will be called *instead of* the regular handler

        on any reply with status != ok
        r#   r$   s     r   handle_reply_status_errorz!Adapter.handle_reply_status_errorQ   s	    
 
r   c                     | j                  |      }| j                  |      }| j                  |      }|d   }t        | |d   d       }||S |d   j	                  dd       dv r| j                  |      S  ||      S )Nr+   r,   contentstatus>   erroraborted)r&   r)   r-   getattrgetr/   )r%   r    r+   handlers       r   __call__zAdapter.__call__X   s      %""3'""3'X$z 2D9?J y>h-1EE11#66s|r   N)__name__
__module____qualname____doc__r   dictstr__annotations__r   r&   r)   r-   r/   r8   r#   r   r   r   r   9   s    
 $&L$sCx.%c3h DcN 4S> d38n 4S> d38n T#s(^ S#X DcN tCH~ r   r   versionc                     g }| j                  d      D ]  }	 |j                  t        |              |S # t        $ r Y -w xY w)zRconvert a version string to a list of ints

    non-int segments are excluded
    .)splitappendint
ValueError)r@   vparts      r   _version_str_to_listrI   h   sQ    
 	Ac" 	HHSY
 H  		s   6	AAc                      e Zd ZdZdZddddddZd	eeef   d
eeef   fdZ	d	eeef   d
eeef   fdZ
d	eeef   d
eeef   fdZd	eeef   d
eeef   fdZd	eeef   d
eeef   fdZd	eeef   d
eeef   fdZd	eeef   d
eeef   fdZd	eeef   d
eeef   fdZd	eeef   d
eeef   fdZd	eeef   d
eeef   fdZd	eeef   d
eeef   fdZy)V5toV4zAdapt msg protocol v5 to v44.1pyoutpyinpyerrobject_info_requestobject_info_reply)execute_resultexecute_inputr3   inspect_requestinspect_replyr    r   c                 Z    |d   j                  dd       |d   j                  dd       |S )r"   r+   r@   Nparent_headerpopr$   s     r   r&   zV5toV4.update_header   s0    H)T*O  D1
r   c                 \   i }|d   }dD ]  }||v st        ||         ||<    |j                  dd      dk(  rd|v rt        |d         |d<   |j                  di       }|j                  d	d      }|j                  d
|       d|v r|j                  dt        |d                ||d<   |S )Handle a kernel info reply.r1   )language_versionprotocol_versionimplementationr
   ipythonimplementation_versionipython_versionlanguage_infonamelanguager@   r\   )rI   r6   
setdefault)r%   r    v4cr1   keyrb   rd   s          r   kernel_info_replyzV5toV4.kernel_info_reply   s    i.; 	>Cg~/=C	> ;;',	9>VZa>a%9'BZ:[%\C!"OR8 $$VR0z8,%NN-/CMR[D\/]^I
r   c                 4    |d   }|j                  dg        |S )Handle an execute request.r1   user_variablesre   r%   r    r1   s      r   execute_requestzV5toV4.execute_request   s!    i.+R0
r   c                 4    |d   }|j                  di        |S )Handle an execute reply.r1   rk   rl   rm   s      r   execute_replyzV5toV4.execute_reply   s!    i.+R0
r   c                 x    |d   }|d   }|d   }t        ||      \  }}i x}|d<   d|d<   ||d<   d|d<   ||d<   |S )	Handle a complete request.r1   r   r   r
   textr   Nblock)r   )r%   r    r1   r   r   r   new_contents          r   complete_requestzV5toV4.complete_request   sj    i.v\*
'j9j'))c)n F"F#G$.L!
r   c                     |d   }|j                  d      }|j                  d      }||z
  }|d   d   d| |d<   |j                  dd       |S )	Handle a complete reply.r1   cursor_start
cursor_endr   r   Nmatched_textmetadatarX   )r%   r    r1   rz   r{   	match_lens         r   complete_replyzV5toV4.complete_reply   s_    i.{{>2[[.
-	"))"4Q"7
"CJ%
r   c                 ~    |d   }|d   }|d   }t        ||      \  }}i x}|d<   t        ||      |d<   |d   |d<   |S )zHandle an object info request.r1   r   r   onamedetail_level)r   r   )r%   r    r1   r   r   _liner   rv   s           r   rP   zV5toV4.object_info_request   sa    i.v\*
j1q'))c)n/jAG&-n&=N#
r   c                     ddd|d<   |S )1inspect_reply can't be easily backward compatibleFunknown)foundr   r1   r#   r$   s     r   rQ   zV5toV4.object_info_reply   s    #(9=I
r   c                 8    |d   }|j                  d      |d<   |S )Handle a stream message.r1   rt   datarX   rm   s      r   streamzV5toV4.stream   "    i.!++f-
r   c                     |d   }|j                  dd       |d   }d|v r	 t        j                  |d         |d<   |S |S # t        $ r Y |S w xY w)zHandle a display data message.r1   sourcedisplayr   application/json)re   jsondumps	Exceptionr%   r    r1   r   s       r   display_datazV5toV4.display_data   so    i.8Y/v%+/::d;M6N+O'( 
s
  
   A 	AAc                 0    |d   j                  dd       |S )Handle an input request.r1   passwordNrX   r$   s     r   input_requestzV5toV4.input_request   s    I:t,
r   N)r9   r:   r;   r<   r@   r   r=   r>   r   r&   rh   rn   rq   rw   r   rP   rQ   r   r   r   r#   r   r   rK   rK   v   s   %G "0,Lc3h DcN T#s(^ S#X "4S> d38n c3h DcN DcN tCH~ $sCx. T#s(^ 
tCH~ 
$sCx. 
T#s(^ S#X $sCx. T#s(^ S#X 4S> c3h DcN r   rK   c                      e Zd ZdZdZej                  j                         D  ci c]  \  }}||
 c}}} Zdee	e
f   dee	e
f   fdZdee	e
f   dee	e
f   fdZdee	e
f   dee	e
f   fdZdee	e
f   dee	e
f   fdZdee	e
f   dee	e
f   fd	Zdee	e
f   dee	e
f   fd
Zdee	e
f   dee	e
f   fdZdee	e
f   dee	e
f   fdZdee	e
f   dee	e
f   fdZdee	e
f   dee	e
f   fdZdee	e
f   dee	e
f   fdZyc c}}} w )V4toV5zConvert msg spec V4 to V5z5.0r    r   c                 X    | j                   |d   d<   |d   r| j                   |d   d<   |S )r"   r+   r@   rW   )r@   r$   s     r   r&   zV4toV5.update_header   s4    #'<<Hi .2llC +
r   c                    |d   }dD ],  }||v sdj                  t        t        ||               ||<   . |j                  dd       |d   j	                  d      rd|v rd	|d
<   |j                  d      |d<   |j                  d      }|j                  di       }|j                  d|       d|v r@dj                  t        t        |j                  d                  }|j                  d|       d|d<   |S )r[   r1   )r]   ra   rB   r]   rL   rd   pythonra   r_   r^   r`   rb   rc   r\   r@   r
   banner)joinmapr>   re   
startswithrY   )r%   r    r1   rg   rd   rb   r\   s          r   rh   zV4toV5.kernel_info_reply   s   i.: 	@Cg~"xxC(>?	@ 	-u5:))(38IW8T(1G$%07<M0NG,-;;z***?B?  2("xxC=O1P(QR$$Y0@A
r   c                 p    |d   }|j                  dg       }|j                  di       }|D ]  }|||<   	 |S )rj   r1   rk   user_expressions)rY   re   )r%   r    r1   rk   r   rG   s         r   rn   zV4toV5.execute_request  sO    i. %5r:"--.@"E 	$A"#Q	$
r   c                 "   |d   }|j                  di       }|j                  di       }|r|j                  |       |j                  dg       D ]=  }|j                  dd      dk(  sd|v sd	|vri |d	<   |j                  d      |d	   d
<   ? |S )rp   r1   r   rk   payloadr   Npagert   r   
text/plain)re   rY   updater6   )r%   r    r1   r   rk   r   s         r   rq   zV4toV5.execute_reply   s    i."--.@"E %5r:##N3 {{9b1 	DG{{8T*f4&G:K(&(GFO07F0C-		D 
r   c                 >    |d   }i x}|d<   |d   |d<   |d   |d<   |S )rs   r1   r   r   r   r#   )r%   r    old_contentrv   s       r   rw   zV4toV5.complete_request1  s<    )n'))c)n)&1F$/$=L!
r   c                     |d   }ddix}|d<   |d   |d<   |d   rt        |d          |d<   nd|d<   d|d<   i |d	<   |S )
ry   r1   r2   okr   r|   rz   Nr{   r}   r   )r%   r    r1   rv   s       r   r   zV4toV5.complete_reply:  ss     i.(0$'77c)n!(!3I>"+.w~/F+G*GK' +/K'$(L!"$J
r   c                 ^    |d   }|d   }i x}|d<   ||d<   t        |      |d<   |d   |d<   |S )zHandle an inspect request.r1   r   r   r   r   r   )r%   r    r1   rc   rv   s        r   rT   zV4toV5.inspect_requestL  sO    i.w'))c)n"F$'IL!&-n&=N#
r   c                 `   |d   }ddix}|d<   |d   x}|d<   i x|d<   }i |d<   |rg }dD ]*  }|j                  |d      s|j                  ||           n d	D ]*  }|j                  |d      s|j                  ||           n |s|j                  d
       dj                  |      |d<   |S )r   r1   r2   r   r   r   r}   )call_definit_definition
definitionF)call_docstringinit_docstring	docstringz<empty docstring>
r   )r6   rD   r   )r%   r    r1   rv   r   r   linesrg   s           r   rU   zV4toV5.inspect_replyW  s    i.(0$'77c)n'.w'77G$%''Fd"$JED ;;sE*LL. I ;;sE*LL. 01!%5!1D
r   c                 8    |d   }|j                  d      |d<   |S )r   r1   r   rt   rX   rm   s      r   r   zV4toV5.streamo  r   r   c                     |d   }|j                  dd       |d   }d|v r	 t        j                  |d         |d<   |S |S # t        $ r Y |S w xY w)zHandle display data.r1   r   Nr   r   )rY   r   loadsr   r   s       r   r   zV4toV5.display_datau  sm    i.Hd#v%+/::d;M6N+O'( 
s
  
r   c                 0    |d   j                  dd       |S )r   r1   r   Frl   r$   s     r   r   zV4toV5.input_request  s    I!!*e4
r   N)r9   r:   r;   r<   r@   rK   r   itemsr=   r>   r   r&   rh   rn   rq   rw   r   rT   rU   r   r   r   ).0krG   s   000r   r   r      s   #G &,%8%8%>%>%@AATQAqDALc3h DcN T#s(^ S#X .4S> d38n c3h DcN "DcN tCH~ $sCx. T#s(^ $	4S> 	d38n 	c3h DcN 0$sCx. T#s(^ S#X 4S> c3h DcN _ Bs   D r   r    
to_versionc                     ddl m} | d   }d|vr
 |       |d<   d|v r!t        |d   j                  d      d         }nd}t        j                  ||fd	      }|| S  ||       S )
aS  Adapt a single message to a target version

    Parameters
    ----------

    msg : dict
        A Jupyter message.
    to_version : int, optional
        The target major version.
        If unspecified, adapt to the current version.

    Returns
    -------

    msg : dict
        A Jupyter message appropriate in the new version.
    r   )utcnowr+   dater@   rB   r      N)sessionr   rE   rC   adaptersr6   )r    r   r   r+   from_versionadapters         r   adaptr     sz    $  ]FVvF6),2237:; llL*5t<G
3<r   ))   r   )r   r   )r<   r   retypingr   _versionr   r>   rE   tupler   compileUNICODEr   r   Ir   r   r   listrI   rK   r   r=   r   r   r#   r   r   <module>r      s,   -  	  +s  c3h " ORZZ8rzz,

3bjj-rttbjj/@A3 C C ., ,^# $s) vW vrXW Xv 2Gq1I tCH~ 3 dSVX[S[n H HHr   