
    Mh                        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
mZmZmZ ddlmZ 	 ddlmZ n# e$ r	 dd	lmZ Y nw xY wdd
lmZ ddlmZ ddlmZ d Zd ZddZd Z G d de          Z ej        e           dS )zKernel connection helpers.    N)Any)Session)WebSocketHandler)FloatInstanceUnicodedefault)LoggingConfigurable)json_default)date_default)extract_dates)_i18n   )KernelWebsocketConnectionABCc                 $   |                                  } t          |                     d                    }t          j        | t
                                        d          }|                    d|           t          |          }d|dz   z  g}|dd         D ]-}|	                    |d         t          |          z              .t          j        d	d
|dz   z  z   |g|R  }|                    d|           d                    |          S )a1  serialize a message as a binary blob

    Header:

    4 bytes: number of msg parts (nbufs) as 32b int
    4 * nbufs bytes: offset for each buffer as integer as 32b int

    Offsets are from the start of the buffer, including the header.

    Returns
    -------
    The message serialized to bytes.

    buffers)r	   utf8r      r   N!I    )copylistpopjsondumpsr   encodeinsertlenappendstructpackjoin)msgr   bmsgnbufsoffsetsbufoffsets_bufs          o/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/jupyter_server/services/kernels/connection/base.pyserialize_binary_messager,      s     ((**C3779%%&&G:c<00077??DNN1dLLEEAIGss| / /wr{SXX-....+cC519$55uGwGGGKNN1k"""88Gr   c           
      @   t          j        d| dd                   d         }t          t          j        dd|z  z   | dd|dz   z                               }|                    d           g }t	          |dd         |dd                   D ]"\  }}|                    | ||                    #t          j        |d                             d	                    }t          |d
                   |d
<   t          |d                   |d<   |dd         |d<   |S )a&  deserialize a message from a binary blog

    Header:

    4 bytes: number of msg parts (nbufs) as 32b int
    4 * nbufs bytes: offset for each buffer as integer as 32b int

    Offsets are from the start of the buffer, including the header.

    Returns
    -------
    message dictionary
    z!iNr   r   r   r   r   r   r   headerparent_headerr   )	r"   unpackr   r!   zipr   loadsdecoder   )r&   r'   r(   bufsstartstopr%   s          r+   deserialize_binary_messager7   5   s    M$RaR))!,E6=sU{!2DQ%!)_9L4MNNOOGNN4D73B3<55 & &tDt$%%%%
*T!W^^F++
,
,C!#h-00CM(_)=>>C!""XC	NJr   c                 f   |rC || d                    || d                    || d                    || d                   g}n| }|                     d          }g }|                    ddt          |          z   dz   z             |                    t          |          |d	         z              |D ]-}|                    t          |          |d	         z              .t          |                              dd
          }d |D             }d                    |g|||          }|S )z*Serialize a message using the v1 protocol.r.   r/   metadatacontentutf-8      r   r   little	byteorderc                 <    g | ]}|                     d d          S )r<   r>   r?   )to_bytes).0offsets     r+   
<listcomp>z*serialize_msg_to_ws_v1.<locals>.<listcomp>b   s(    LLL&vqH55LLLr   r   )r   r!   r    rB   r$   )msg_or_listchannelr#   msg_listr(   r%   offset_numberbin_msgs           r+   serialize_msg_to_ws_v1rK   P   sL    DX&''D_-..DZ())DY'((	
 nnW%%GGNN1H-12333NN3w<<'"+-... / /s3xx'"+-....LL))!x)@@MLLGLLLGhhDDD8DEEGNr   c                     t                                dd         d          } fdt          |          D              d         d                                      d          } fdt          d|dz
            D             }||fS )	z,Deserialize a message using the v1 protocol.Nr<   r>   c           	      n    g | ]1}t                               d |dz   z  d |dz   z           d          2S )r<   r   r=   r>   )int
from_bytes)rC   iws_msgs     r+   rE   z.deserialize_msg_from_ws_v1.<locals>.<listcomp>j   sN       HIva1q5kAQK78(CC  r   r   r   r;   c                 B    g | ]}|         |d z                     S )r    )rC   rP   r(   rQ   s     r+   rE   z.deserialize_msg_from_ws_v1.<locals>.<listcomp>n   s/    YYYwqzGAEN23YYYr   )rN   rO   ranger3   )rQ   rI   rG   rH   r(   s   `   @r+   deserialize_msg_from_ws_v1rU   g   s    NN6"1":x88M   MRS`MaMa  G WQZ'!*,-44W==GYYYYYU1mVWFW=X=XYYYHHr   c                   j   e Zd ZdZ eddd ed                    Zed             Zed             Z	ed             Z
ed	             Z e            Z ed
          d             Z eed          Z ed          d             Z ee          Zd Zd ZdeddfdZdedee         ddfdZdS )BaseKernelWebsocketConnectionzJA configurable base class for connecting Kernel WebSockets to ZMQ sockets.NTa  Preferred kernel message protocol over websocket to use (default: None). If an empty string is passed, select the legacy protocol. If None, the selected protocol will depend on what the front-end supports (usually the most recent protocol supported by the back-end and the front-end).)
allow_noneconfighelpc                     | j         S )zThe kernel manager.)parentselfs    r+   kernel_managerz,BaseKernelWebsocketConnection.kernel_manager   s     {r   c                     | j         j        S )zThe multi kernel manager.)r_   r\   r]   s    r+   multi_kernel_managerz2BaseKernelWebsocketConnection.multi_kernel_manager   s     "))r   c                     | j         j        S )zThe kernel id.)r_   	kernel_idr]   s    r+   rc   z'BaseKernelWebsocketConnection.kernel_id   s     ",,r   c                     | j         j         S )zThe session id.)sessionr]   s    r+   
session_idz(BaseKernelWebsocketConnection.session_id   s     |##r   kernel_info_timeoutc                     | j         j        S N)ra   rg   r]   s    r+   _default_kernel_info_timeoutz:BaseKernelWebsocketConnection._default_kernel_info_timeout   s    (<<r   )klassrY   re   c                 ,    t          | j                  S )N)rY   )r   rY   r]   s    r+   _default_sessionz.BaseKernelWebsocketConnection._default_session   s    dk****r   c                    K   t           )zHandle a connect.NotImplementedErrorr]   s    r+   connectz%BaseKernelWebsocketConnection.connect         !!r   c                    K   t           )zHandle a disconnect.ro   r]   s    r+   
disconnectz(BaseKernelWebsocketConnection.disconnect   rr   r   incoming_msgreturnc                     t           )zHandle an incoming message.ro   )r^   ru   s     r+   handle_incoming_messagez5BaseKernelWebsocketConnection.handle_incoming_message       !!r   streamoutgoing_msgc                     t           )zHandle an outgoing message.ro   )r^   rz   r{   s      r+   handle_outgoing_messagez5BaseKernelWebsocketConnection.handle_outgoing_message   ry   r   )__name__
__module____qualname____doc__r   r   kernel_ws_protocolpropertyr_   ra   rc   rf   r   rg   r	   rj   r   r   re   rm   r   websocket_handlerrq   rt   strrx   r   r   r}   rS   r   r+   rW   rW   r   s       TT U
 
	     X * * X* - - X- $ $ X$  %''W"##= = $#= hWT222GWY+ + + !!122" " "" " ""C "D " " " ""c "c "t " " " " " "r   rW   ri   )r   r   r"   typingr   jupyter_client.sessionr   tornado.websocketr   	traitletsr   r   r   r	   traitlets.configr
   jupyter_client.jsonutilr   ImportErrorr   r   jupyter_server.transutilsr   abcr   r,   r7   rK   rU   rW   registerrS   r   r+   <module>r      s               * * * * * * . . . . . . 7 7 7 7 7 7 7 7 7 7 7 7 0 0 0 0 0 0E4444444 E E EDDDDDDDDE 2 1 1 1 1 1 + + + + + + - - - - - -  :  6   .  @" @" @" @" @"$7 @" @" @"F &  %&C D D D D Ds   7 AA