Ë
    :vžjÔ  ã                   ó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    úz/workspace/moltex-experiments/.pixi/envs/default/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  è ø€ à× Ñ ˆô (Ø�O‰O×)Ñ)¨$°°iÀÓKó
÷ 
ˆ
ñ Ü—-‘- Ó$Ð$à×$Ñ$×/Ñ/°·±Ó?ˆØ×@Ñ@Ø¨T¸$¿+¹+ð Aó 
ˆŒð ×Ñ˜\¨4Ô0Ø.2×.?Ñ.?ÀÓ.MˆD�O‰O×#Ñ#Õ+à�H‰H×ÑÐ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<   øè ø€ ð #ˆŒØ�l‰l‹n×ÐÜ‰g‰k IˆkÓ.×.Ñ.ð 	øØ.ú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   øè ø€ ô 	‰‰Œà�‰�‰Ð-¨d¯n©nÐ-=¸QÐ?Ô@Ø�o‰o×%Ñ%Ó'×'Ò'ú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   