
    Xh                     n    d 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dlmZ dZ G d	 d
eee
      Zy)z/Tornado handlers for WebSocket <-> ZMQ sockets.    )ensure_async)web)WebSocketHandler)ws_authenticated)JupyterHandler)WebSocketMixinkernelsc                   n     e Zd ZdZeZed        Zd Zd Z	d Z
e fd       Z fdZd Zd	 Zd
 Z xZS )KernelWebsocketHandlerz$The kernels websocket should connectc                 8    | j                   j                  d      S )z&The kernel websocket connection class.!kernel_websocket_connection_classsettingsgetselfs    ]/var/www/html/myenv/lib/python3.12/site-packages/jupyter_server/services/kernels/websocket.pyr   z8KernelWebsocketHandler.kernel_websocket_connection_class   s     }}  !DEE    c                      y)zhUndo the set_default_headers in JupyterHandler

        which doesn't make sense for websockets
        N r   s    r   set_default_headersz*KernelWebsocketHandler.set_default_headers   s    r   c                 :    | j                   j                  dd      S )z"Get the socket connection options.websocket_compression_optionsNr   r   s    r   get_compression_optionsz.KernelWebsocketHandler.get_compression_options    s    }}  !@$GGr   c                 j  K   | j                   }t        | j                  j                  | |dd             d{   }|st	        j
                  d      | j                  j                  | j                        }| j                  || | j                        | _        | j                  dd      r+| j                  d      | j                  j                  _        n| j                  j                  d       t!        | j                  d      r#| j                  j#                          d{    yy7 7 w)	zHandle a pre_get.executer	   Ni  )parentwebsocket_handlerconfig
session_idzNo session ID specifiedprepare)current_userr   
authorizeris_authorizedr   	HTTPErrorkernel_manager
get_kernel	kernel_idr   r   
connectionget_argumentsessionlogwarninghasattrr!   )r   user
authorizedkernels       r   pre_getzKernelWebsocketHandler.pre_get$   s       (OO))$iK
 

 --$$$$//?@@T$++ A 
 \40.2.?.?.MDOO##+HH67 4??I.//))+++ /#
$ ,s"   7D3D/C.D3(D1)D31D3c                    K   || _         | j                          d{    t        |   |       d{    y7 7 w)z"Handle a get request for a kernel.N)r(   )r(   r2   superr   r   r(   	__class__s     r   r   zKernelWebsocketHandler.get=   s<      #llngkIk... 	.s   A <A >A A c                    K   t         |           | j                  j                  d| j                   d       | j
                  j                          d{    y7 w)zOpen a kernel websocket.zConnecting to kernel .N)r4   openr,   infor(   r)   connectr5   s     r   r9   zKernelWebsocketHandler.openD   sG      	-dnn-=Q?@oo%%'''s   AA AA c                 :    | j                   j                  |       y)zGGet a kernel message from the websocket and turn it into a ZMQ message.N)r)   handle_incoming_message)r   
ws_messages     r   
on_messagez!KernelWebsocketHandler.on_messageM   s    //
;r   c                 F    | j                   j                          d| _         y)zHandle a socket closure.N)r)   
disconnectr   s    r   on_closezKernelWebsocketHandler.on_closeQ   s    ""$r   c                 ^    | j                   j                  }|d}n|dk(  rd}||v r|}|S d}|S )z'Select the sub protocol for the socket.Nzv1.kernel.websocket.jupyter.org )r)   kernel_ws_protocol)r   subprotocolspreferred_protocolselected_subprotocols       r   select_subprotocolz)KernelWebsocketHandler.select_subprotocolV   sP    !__??%!B2%!%5G<5W1## ^b##r   )__name__
__module____qualname____doc__AUTH_RESOURCEauth_resourcepropertyr   r   r   r2   r   r   r9   r?   rB   rI   __classcell__)r6   s   @r   r   r      sW    .!MF FH,2 / /(<
	$r   r   N)rM   jupyter_core.utilsr   tornador   tornado.websocketr   jupyter_server.auth.decoratorr   jupyter_server.base.handlersr   jupyter_server.base.websocketr   rN   r   r   r   r   <module>rX      s4    5 ,  . : 7 8O$^-=~ O$r   