o
    i-8                  	   @   s   d Z ddlZddlZddlmZmZmZmZ ddlm	Z	 de
dedee
ef fd	d
ZedejZedejZedejejB Zde
dede
fddZG dd dZde
dee fddZG dd deZG dd deZe	d fdee
ef dedee
ef fddZe e dZdS )z'Adapters for Jupyter msg spec versions.    N)AnyDictListTuple   )protocol_version_infocode
cursor_posreturnc                 C   sB   | sdS |  dD ]}t|}||kr||8 }q	 ||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n r   Q/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/jupyter_client/adapter.pycode_to_line   s   
r   z\([^\(\)]+\)z	\([^\(]*$z[a-z_][0-9a-z._]*c                 C   sd   t | |\}}|}td|}||kr|}td|}||kstd|}t|}|r0|d S dS )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matchesr   r   r   extract_oname_v4!   s   
r   c                   @   s   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dZ	deeef deeef fddZ
deeef deeef fd	d
Zdeeef deeef fddZdeeef deeef fddZdS )AdapterzaBase class for adapting messages

    Override message_type(msg) methods to create adapters.
    msg_type_mapmsgr
   c                 C      |S )Update the header.r   selfr   r   r   r   update_header@      zAdapter.update_headerc                 C   r    )zUpdate the metadata.r   r"   r   r   r   update_metadataD   r%   zAdapter.update_metadatac                 C   s4   |d }|d }|| j v r| j |  |d< |d< |S )zUpdate the message type.headermsg_type)r   )r#   r   r'   r(   r   r   r   update_msg_typeH   s
   
zAdapter.update_msg_typec                 C   r    )zeThis will be called *instead of* the regular handler

        on any reply with status != ok
        r   r"   r   r   r   handle_reply_status_errorP   s   z!Adapter.handle_reply_status_errorc                 C   sh   |  |}| |}| |}|d }t| |d d }|d u r!|S |d dd dv r0| |S ||S )Nr'   r(   contentstatus>   erroraborted)r$   r&   r)   getattrgetr*   )r#   r   r'   handlerr   r   r   __call__W   s   



zAdapter.__call__N)__name__
__module____qualname____doc__r   r   str__annotations__r   r$   r&   r)   r*   r2   r   r   r   r   r   8   s   
 """"&r   versionc              	   C   s<   g }|  dD ]}z	|t| W q ty   Y qw |S )zRconvert a version string to a list of ints

    non-int segments are excluded
    .)splitappendint
ValueError)r9   vpartr   r   r   _version_str_to_listg   s   rA   c                   @   s  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dZ	d	eeef d
eeef fddZ
d	eeef d
eeef fddZd	eeef d
eeef fddZd	eeef d
eeef fddZd	eeef d
eeef fddZd	eeef d
eeef fddZd	eeef d
eeef fddZd	eeef d
eeef fddZd	eeef d
eeef fddZd	eeef d
eeef fdd Zd!S )"V5toV4zAdapt msg protocol v5 to v44.1pyoutpyinpyerrobject_info_requestobject_info_reply)execute_resultexecute_inputr-   inspect_requestinspect_replyr   r
   c                 C   s$   |d  dd |d  dd |S )r!   r'   r9   Nparent_headerpopr"   r   r   r   r$      s   zV5toV4.update_headerc                 C   s   i }|d }dD ]}||v rt || ||< q|dddkr+d|v r+t |d |d< |di }|d	d}|d
| d|v rK|dt |d  ||d< |S )Handle a kernel info reply.r+   )language_versionprotocol_versionimplementationr   ipythonimplementation_versionipython_versionlanguage_infonamelanguager9   rQ   )rA   r0   
setdefault)r#   r   v4cr+   keyrW   rY   r   r   r   kernel_info_reply   s   zV5toV4.kernel_info_replyc                 C   s   |d }| dg  |S )Handle an execute request.r+   user_variablesrZ   r#   r   r+   r   r   r   execute_request   s   zV5toV4.execute_requestc                 C   s   |d }| di  |S )Handle an execute reply.r+   r_   r`   ra   r   r   r   execute_reply   s   zV5toV4.execute_replyc                 C   sV   |d }|d }|d }t ||\}}i  }|d< d|d< ||d< d|d< ||d< |S )	Handle a complete request.r+   r   r	   r   textr   Nblock)r   )r#   r   r+   r   r	   r   new_contentr   r   r   complete_request   s   zV5toV4.complete_requestc                 C   sL   |d }| d}| d}|| }|d d d| |d< | dd |S )	Handle a complete reply.r+   cursor_start
cursor_endr   r   Nmatched_textmetadatarN   )r#   r   r+   rk   rl   	match_lenr   r   r   complete_reply   s   

zV5toV4.complete_replyc                 C   sP   |d }|d }|d }t ||\}}i  }|d< t|||d< |d |d< |S )zHandle an object info request.r+   r   r	   onamedetail_level)r   r   )r#   r   r+   r   r	   r   r   rh   r   r   r   rG      s   zV5toV4.object_info_requestc                 C   s   ddd|d< |S )1inspect_reply can't be easily backward compatibleFunknown)foundrq   r+   r   r"   r   r   r   rH      s   zV5toV4.object_info_replyc                 C      |d }| d|d< |S )Handle a stream message.r+   rf   datarN   ra   r   r   r   stream      zV5toV4.streamc                 C   V   |d }| dd |d }d|v r)zt|d |d< W |S  ty(   Y |S w |S )zHandle a display data message.r+   sourcedisplayrx   application/json)rZ   jsondumps	Exceptionr#   r   r+   rx   r   r   r   display_data      zV5toV4.display_datac                 C      |d  dd |S )Handle an input request.r+   passwordNrN   r"   r   r   r   input_request      zV5toV4.input_requestN)r3   r4   r5   r6   r9   r   r   r7   r   r$   r]   rb   rd   ri   rp   rG   rH   ry   r   r   r   r   r   r   rB   u   s(    """""""
"""&rB   c                   @   s  e Zd ZdZdZdd ej D Zdee	e
f dee	e
f fddZdee	e
f dee	e
f fd	d
Zdee	e
f dee	e
f fddZdee	e
f dee	e
f fddZdee	e
f dee	e
f fddZdee	e
f dee	e
f fddZdee	e
f dee	e
f fddZdee	e
f dee	e
f fddZdee	e
f dee	e
f fddZdee	e
f dee	e
f fddZdee	e
f dee	e
f fddZdS )V4toV5zConvert msg spec V4 to V5z5.0c                 C   s   i | ]\}}||qS r   r   ).0kr?   r   r   r   
<dictcomp>   s    zV4toV5.<dictcomp>r   r
   c                 C   s(   | j |d d< |d r| j |d d< |S )r!   r'   r9   rM   )r9   r"   r   r   r   r$      s   zV4toV5.update_headerc                 C   s   |d }dD ]}||v rd tt|| ||< q|dd |d dr5d|v r5d	|d
< |d|d< |d}|di }|d| d|v r[d tt|d}|d| d|d< |S )rP   r+   )rR   rV   r:   rR   rC   rY   pythonrV   rT   rS   rU   rW   rX   rQ   r9   r   banner)joinmapr7   rZ   
startswithrO   )r#   r   r+   r\   rY   rW   rQ   r   r   r   r]      s"   
zV4toV5.kernel_info_replyc                 C   s6   |d }| dg }|di }|D ]}|||< q|S )r^   r+   r_   user_expressions)rO   rZ   )r#   r   r+   r_   r   r?   r   r   r   rb     s   
zV4toV5.execute_requestc                 C   s~   |d }| di }|di }|r|| |dg D ]}|dddkr<d|v r<d	|vr3i |d	< |d|d	 d
< q|S )rc   r+   r   r_   payloadr|   Npagerf   rx   
text/plain)rZ   rO   updater0   )r#   r   r+   r   r_   r   r   r   r   rd     s   
zV4toV5.execute_replyc                 C   s0   |d }i  }|d< |d |d< |d |d< |S )re   r+   r   r   r	   r   )r#   r   old_contentrh   r   r   r   ri   0  s
   zV4toV5.complete_requestc                 C   s\   |d }ddi }|d< |d |d< |d r t |d  |d< nd|d< d|d< i |d	< |S )
rj   r+   r,   okr   rm   rk   Nrl   rn   r   )r#   r   r+   rh   r   r   r   rp   9  s   zV4toV5.complete_replyc                 C   s@   |d }|d }i  }|d< ||d< t ||d< |d |d< |S )zHandle an inspect request.r+   rq   r   r	   rr   r   )r#   r   r+   rX   rh   r   r   r   rK   K  s   zV4toV5.inspect_requestc                 C   s   |d }ddi }|d< |d  }|d< i  |d< }i |d< |rXg }dD ]}| |dr5|||   nq$d	D ]}| |drI|||   nq8|sQ|d
 d||d< |S )rs   r+   r,   r   ru   rx   rn   )call_definit_definition
definitionF)call_docstringinit_docstring	docstringz<empty docstring>
r   )r0   r<   r   )r#   r   r+   rh   ru   rx   linesr\   r   r   r   rL   V  s*   
zV4toV5.inspect_replyc                 C   rv   )rw   r+   rx   rf   rN   ra   r   r   r   ry   n  rz   zV4toV5.streamc                 C   r{   )zHandle display data.r+   r|   Nrx   r~   )rO   r   loadsr   r   r   r   r   r   t  r   zV4toV5.display_datac                 C   r   )r   r+   r   Fr`   r"   r   r   r   r     r   zV4toV5.input_requestN)r3   r4   r5   r6   r9   rB   r   itemsr   r7   r   r$   r]   rb   rd   ri   rp   rK   rL   ry   r   r   r   r   r   r   r      s    ""	""	""	""""&r   r   
to_versionc                 C   sn   ddl m} | d }d|vr| |d< d|v r#t|d dd }nd}t||fd	}|d	u r3| 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'   dater9   r:   r      N)sessionr   r=   r;   adaptersr0   )r   r   r   r'   from_versionadapterr   r   r   adapt  s   
r   ))   r   )r   r   )r6   r   retypingr   r   r   r   _versionr   r7   r=   r   compileUNICODEr   r   Ir   r   r   rA   rB   r   r   r   r   r   r   r   <module>   s&    /y .$
