
    Ne4              	          d Z ddlZddlZddlmZ ddlmZ ddlm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e      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)Dict)List)Tuple)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       8/usr/lib/python3/dist-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 N selfr"   s     r   update_headerzAdapter.update_headerC       
r   c                     |S r$   r%   r&   s     r   update_metadatazAdapter.update_metadataF   r)   r   c                 d    |d   }|d   }|| j                   v r| j                   |   x|d<   |d<   |S )N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_errorP   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getr1   )r'   r"   r-   handlers       r   __call__zAdapter.__call__W   s      %""3'""3'X$z 2D9?J y>h-1EE11#66s|r   N)__name__
__module____qualname____doc__r!   r   str__annotations__r   r(   r+   r/   r1   r:   r%   r   r   r    r    ;   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)rA   vparts      r   _version_str_to_listrJ   g   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_inputr5   inspect_requestinspect_replyr"   r
   c                 Z    |d   j                  dd        |d   j                  dd        |S Nr-   rA   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 )Nr3   )language_versionprotocol_versionimplementationr   ipythonimplementation_versionipython_versionlanguage_infonamelanguagerA   r]   )rJ   r8   
setdefault)r'   r"   v4cr3   keyrc   re   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 Nr3   user_variablesrf   r'   r"   r3   s      r   execute_requestzV5toV4.execute_request   s!    i.+R0
r   c                 4    |d   }|j                  di        |S rk   rm   rn   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 )Nr3   r   r	   r   textr   block)r   )r'   r"   r3   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 )Nr3   cursor_start
cursor_endr   r   matched_textmetadatarZ   )r'   r"   r3   rx   ry   	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 )Nr3   r   r	   onamedetail_level)r   r   )r'   r"   r3   r   r	   r   r   ru   s           r   rQ   zV5toV4.object_info_request   sa    i.v\*
tZ0a'))c)n/jAG&-n&=N#
r   c                     ddd|d<   |S )1inspect_reply can't be easily backward compatibleFunknown)foundr   r3   r%   r&   s     r   rR   zV5toV4.object_info_reply   s    #(9=I
r   c                 8    |d   }|j                  d      |d<   |S )Nr3   rs   datarZ   rn   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)Nr3   sourcedisplayr   application/json)rf   jsondumps	Exceptionr'   r"   r3   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 )Nr3   passwordrZ   r&   s     r   input_requestzV5toV4.input_request   s    I:t,
r   N)r;   r<   r=   r>   rA   r!   r   r?   r   r(   ri   ro   rq   rv   r}   rQ   rR   r   r   r   r%   r   r   rL   rL   u   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   rL   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 rX   )rA   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 )Nr3   )r^   rb   rC   r^   rM   re   pythonrb   r`   r_   ra   rc   rd   r]   rA   r   banner)joinmapr?   rf   
startswithr[   )r'   r"   r3   rh   re   rc   r]   s          r   ri   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 )Nr3   rl   user_expressions)r[   rf   )r'   r"   r3   rl   r   rH   s         r   ro   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 )
Nr3   r   rl   payloadr   pagers   r   
text/plain)rf   r[   updater8   )r'   r"   r3   r   rl   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 )Nr3   r   r   r	   r%   )r'   r"   old_contentru   s       r   rv   zV4toV5.complete_request"  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 )	Nr3   r4   okr   rz   rx   ry   r{   r   )r'   r"   r3   ru   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 )Nr3   r   r   r	   r   r   )r'   r"   r3   rd   ru   s        r   rU   zV4toV5.inspect_request;  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   r3   r4   r   r   r   r{   )call_definit_definition
definitionF)call_docstringinit_docstring	docstringz<empty docstring>
r   )r8   rE   r   )r'   r"   r3   ru   r   r   linesrh   s           r   rV   zV4toV5.inspect_replyE  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 )Nr3   r   rs   rZ   rn   s      r   r   zV4toV5.stream]  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)Nr3   r   r   r   )r[   r   loadsr   r   s       r   r   zV4toV5.display_datab  sm    i.Hd#v%+/::d;M6N+O'( 
s
  
r   c                 0    |d   j                  dd       |S )Nr3   r   Frm   r&   s     r   r   zV4toV5.input_requestp  s    I!!*e4
r   N)r;   r<   r=   r>   rA   rL   r!   itemsr   r?   r   r(   ri   ro   rq   rv   r}   rU   rV   r   r   r   ).0krH   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 M 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.
       )utcnowr-   daterA   rC   r      N)sessionr   rF   rD   adaptersr8   )r"   r   r   r-   from_versionadapters         r   adaptr   u  sz    $  ]FVvF6),2237:; llL*5t<G
3<r   ))   r   )r   r   )r>   r   retypingr   r   r   r   jupyter_clientr   r?   rF   r   compileUNICODEr   r   Ir   r   objectr    rJ   rL   r   r   r   r%   r   r   <module>r      s7   -  	     0s  c3h " ORZZ8rzz,

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