
    Ke                     ^    d 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
d	S )
z/Tornado handlers for WebSocket <-> ZMQ sockets.    )web)WebSocketHandler)JupyterHandler)WebSocketMixinkernelsc                   j     e Zd ZdZeZed             Zd Zd Z	d Z
 fdZ fdZd Zd	 Zd
 Z xZS )KernelWebsocketHandlerz$The kernels websocket should connectc                 6    | j                             d          S )z&The kernel websocket connection class.!kernel_websocket_connection_classsettingsgetselfs    Ilib/python3.11/site-packages/jupyter_server/services/kernels/websocket.pyr   z8KernelWebsocketHandler.kernel_websocket_connection_class   s     }  !DEEE    c                     dS )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                 8    | 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GGr   c                 r  K   | j         }|.| j                            d           t          j        d          | j                            | |dd          st          j        d          | j                            | j	                  }| 
                    || | j                  | _        |                     dd          r%|                     d          | j        j        _        n| j                            d           t          | j        d	          r!| j                                         d{V  dS dS )
zHandle a pre_get.Nz*Couldn't authenticate WebSocket connectioni  executer   )parentwebsocket_handlerconfig
session_idzNo session ID specifiedprepare)current_userlogwarningr   	HTTPError
authorizeris_authorizedkernel_manager
get_kernel	kernel_idr   r   
connectionget_argumentsessionhasattrr   )r   userkernels      r   pre_getzKernelWebsocketHandler.pre_get#   sE       <HIJJJ-$$$ ,,T4INN 	%-$$$$//??@@T$+ A 
 
 \400 	8.2.?.?.M.MDO#++H6777 4?I.. 	,/))+++++++++++	, 	,r   c                    K   || _         |                                  d{V  t                                          |           d{V  dS )z"Handle a get request for a kernel.N)r(   )r(   r/   superr   r   r(   	__class__s     r   r   zKernelWebsocketHandler.get=   s^      "llnnggkkIk...........r   c                    K   t                                                       | j                            d| j         d           | j                                         d{V  dS )zOpen a kernel websocket.zConnecting to kernel .N)r1   openr!   infor(   r)   connectr2   s     r   r6   zKernelWebsocketHandler.openC   sh       	?dn???@@@o%%'''''''''''r   c                 :    | j                             |           dS )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_messageL   s    //
;;;;;r   c                 F    | j                                          d| _         dS )zHandle a socket closure.N)r)   
disconnectr   s    r   on_closezKernelWebsocketHandler.on_closeP   s!    ""$$$r   c                 H    | j         j        }|d}n|dk    rd}||v r|n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_subprotocolU   sJ    !_?%!B2%%!%5G<5W5W11]a##r   )__name__
__module____qualname____doc__AUTH_RESOURCEauth_resourcepropertyr   r   r   r/   r   r6   r<   r?   rF   __classcell__)r3   s   @r   r	   r	      s        ..!MF F XF  H H H, , ,4/ / / / /( ( ( ( (< < <  
	$ 	$ 	$ 	$ 	$ 	$ 	$r   r	   N)rJ   tornador   tornado.websocketr   jupyter_server.base.handlersr   jupyter_server.base.websocketr   rK   r	   r   r   r   <module>rS      s    5 5       . . . . . . 7 7 7 7 7 7 8 8 8 8 8 8P$ P$ P$ P$ P$^-=~ P$ P$ P$ P$ P$r   