
    }tf^                         d Z ddlZddlmZ ddlmZmZmZ  G d dej                        Z		 	 	 	 	 d
dZ
 G d d	ej                        Zy)zw
Authenticated HTTP proxy for Jupyter Notebooks

Some original inspiration from https://github.com/senko/tornado-proxy
    N)ensure_async)
httpclienthttputil	websocketc                   (     e Zd ZdZ fdZd Z xZS )PingableWSClientConnectionz5A WebSocketClientConnection with an on_ping callback.c                 F    d|v r|d   | _         |d= t        |   di | y )Non_ping_callback )_on_ping_callbacksuper__init__)selfkwargs	__class__s     h/var/www/html/software/conda/envs/higlass/lib/python3.12/site-packages/jupyter_server_proxy/websocket.pyr   z#PingableWSClientConnection.__init__   s2    '%+,>%?D")*"6"    c                 @    | j                   r| j                  |       y y N)r   )r   datas     r   on_pingz"PingableWSClientConnection.on_ping   s    !!""4( "r   )__name__
__module____qualname____doc__r   r   __classcell__r   s   @r   r   r      s    ?#)r   r   c                    t        j                  | j                        | _        t        j                  | t        j
                  j                        } |rd|ini }t        d| i ||t        t        dd      |d|}|j                  S )zo
    A variation on websocket_connect that returns a PingableWSClientConnection
    with on_ping_callback.
    resolver_default_max_message_sizei   )requestcompression_optionson_message_callbackr
   max_message_sizesubprotocolsr   )r   HTTPHeadersheadersr   _RequestProxyHTTPRequest	_DEFAULTSr   getattrr   connect_future)r!   r#   r
   r%   r   r   conns          r   pingable_ws_connectr.      s     **7??;GO&&w
0F0F0P0PQG
 (0j(#RF% 
/) 24D
 "
 
D r   c                   (     e Zd Z fdZ fdZ xZS )WebSocketHandlerMixinc                 P    t           |i | t        j                  t	                     }t
        |v sJ |j                  t
              }	 ||dz       fd}dD ]  }t         | ||               j                   g|i | y # t        $ r t        d      w xY w)N   zHWebSocketHandlerMixin should be followed by another parent to make sensec                       fd}|S )Nc                  2     t              g| i | y r   )r+   )args2kwargs2method
nextparentr   s     r   
undisallowzCWebSocketHandlerMixin.__init__.<locals>.wrapper.<locals>.undisallowR   s    +
F+DD5DGDr   r   )r7   r9   r8   r   s   ` r   wrapperz/WebSocketHandlerMixin.__init__.<locals>.wrapperQ   s    E r   )writeredirect
set_header
set_cookie
set_statusflushfinish)
r   r   inspectgetmrotyper0   index
IndexError	Exceptionsetattr)	r   argsr   basesmeindexr:   r7   r8   r   s	   `      @r   r   zWebSocketHandlerMixin.__init__@   s    $)&) tDz*$---++34	w{+J	
 		3F D&'&/2		3 	
D242621  	2 	s   B B%c                    K   | j                   j                  j                  dd      j                         dk7  r | j                  |i | d {   S t        t        |   |i |       d {    y 7 %7 w)NUpgrade r   )r!   r'   getlowerhttp_getr   r   )r   rI   r   r   s      r   rO   zWebSocketHandlerMixin.getc   sm     <<##Ir288:kI&7777uw{D;F;<<< 8<s$   AA:A6A:0A81A:8A:)r   r   r   r   rO   r   r   s   @r   r0   r0   ?   s    !3F= =r   r0   )NNNNN)r   rB   jupyter_server.utilsr   tornador   r   r   WebSocketClientConnectionr   r.   WebSocketHandlerr0   r   r   r   <module>rV      sS     - 3 3)!D!D )  H(=I66 (=r   