
    Fhw                     @   S r SSKJrJr  SSKJr  SSKJrJr  SSK	J
r  SSKJr  SSKJr   SSKJr   SS
KJr  SSKJr  SSKJr  SSKJr  Sr " S S\5      r " S S\5      r " S S\\\5      r " S S\5      r S r!g! \ a    S	 r NXf = f! \ a	    SS
KJr   Ncf = f)zEtornado handler for managing and communicating with language servers
    )OptionalText)ensure_async)
APIHandlerJupyterHandler)url_path_join)web)WebSocketHandler)
authorizedc                     U $ )z)A no-op fallback for `jupyter_server 1.x` )methods    gC:\Users\julio\OneDrive\Documentos\Trabajo\Ideas Frescas\venv\Lib\site-packages\jupyter_lsp/handlers.pyr   r      s        )WebSocketMixin   )LanguageServerManager)SERVERS_RESPONSE)censored_speclspc                   &    \ rS rSrSrS\4S jrSrg)BaseHandler!   Nmanagerc                     Xl         g Nr   selfr   s     r   
initializeBaseHandler.initialize$       r   r   __name__
__module____qualname____firstlineno__r   r   r    __static_attributes__r   r   r   r   r   !       G"7 r   r   c                   &    \ rS rSrSrS\4S jrSrg)BaseJupyterHandler(   Nr   c                     Xl         g r   r   r   s     r   r    BaseJupyterHandler.initialize+   r"   r   r   r#   r   r   r   r+   r+   (   r)   r   r+   c                   d   ^  \ rS rSr% Sr\rSr\\	   \
S'   S rU 4S jrU 4S jrS rS	 rS
rU =r$ )LanguageServerWebSocketHandler/   aT  Setup tornado websocket to route to language server sessions.

The logic of `get` and `pre_get` methods is derived from jupyter-server ws handlers,
and should be kept in sync to follow best practice established by upstream; see:
https://github.com/jupyter-server/jupyter_server/blob/v2.12.5/jupyter_server/services/kernels/websocket.py#L36
Nlanguage_serverc                 R  #    U R                   nUc1  U R                  R                  S5        [        R                  " S5      e[        U S5      (       d  g[        U R                  R                  XS[        5      5      I Sh  vN nU(       d  [        R                  " S5      eg N"7f)zHandle a pre_get.Nz*Couldn't authenticate WebSocket connectioni  
authorizerexecute)
current_userlogwarningr	   	HTTPErrorhasattrr   r4   is_authorizedAUTH_RESOURCE)r   userr;   s      r   pre_get&LanguageServerWebSocketHandler.pre_get=   s        <HHIJ--$$t\** +OO))$iO
 
 --$$ 
s   B B'B%#B'c                    >#    U R                  5       I Sh  vN   [        TU ]  " U0 UD6nUb  UI Sh  vN   gg N# N7f)zGet an event socket.N)r>   superget)r   argskwargsres	__class__s       r   rB   "LanguageServerWebSocketHandler.getP   sC     llngk4*6*?II  	 s   ?;?=??c                   >#    U R                   R                  5       I S h  vN   Xl        U R                   R                  U 5        U R                  R                  SR                  U R                  5      5        [        TU ]!  5         g  Nh7f)Nz[{}] Opened a handler)	r   readyr2   	subscriber7   debugformatrA   open)r   r2   rF   s     r   rM   #LanguageServerWebSocketHandler.openW   sd     ll  """.t$.55d6J6JKL	 	#s   BB
A)Bc                    #    U R                   R                  SR                  U R                  5      5        U R                  R                  X5      I S h  vN   g  N7f)Nz[{}] Handling a message)r7   rK   rL   r2   r   on_client_message)r   messages     r   
on_message)LanguageServerWebSocketHandler.on_message^   s?     0778L8LMNll,,W;;;s   AAAAc                     U R                   R                  U 5        U R                  R                  SR	                  U R
                  5      5        g )Nz[{}] Closed a handler)r   unsubscriber7   rK   rL   r2   )r   s    r   on_close'LanguageServerWebSocketHandler.on_closeb   s6      &.55d6J6JKLr   )r2   )r$   r%   r&   r'   __doc__r<   auth_resourcer2   r   r   __annotations__r>   rB   rM   rR   rV   r(   __classcell__)rF   s   @r   r0   r0   /   s=     "M&*OXd^*%&<M Mr   r0   c                   N    \ rS rSrSr\r\r\	R                  \S 5       5       rSrg)LanguageServersHandlerg   zkReports the status of all current servers

Response should conform to schema in schema/servers.schema.json
c           
      f  #    U R                   R                  5       I Sh  vN   SU R                   R                  R                  5        VVs0 s H  u  pXR	                  5       _M     snnU R                   R
                  R                  5        VVs0 s H  u  p4U[        U5      _M     snnS.n[        U R                  R                  U5      5      nU(       a4  U R                  R                  SR                  [        U5      U5      5        U R                  U5        g GNs  snnf s  snnf 7f)z4finish with the JSON representations of the sessionsN   )versionsessionsspecsz{} validation errors: {})r   rI   rb   itemsto_jsonall_language_serversr   list	validatoriter_errorsr7   r8   rL   lenfinish)r   r2   sessionkeyspecresponseerrorss          r   rB   LanguageServersHandler.getp   s      ll  """  150E0E0K0K0M0M,O  !220M "&!B!B!H!H!J!JIC ]4((!J

 dnn00:;HH7>>s6{FSTH' 	#s.   D1D",D1D%)*D1D+
+A8D1%D1r   N)r$   r%   r&   r'   rX   r<   rY   r   rh   r	   authenticatedr   rB   r(   r   r   r   r]   r]   g   s3    
 "M I  r   r]   c           	          [        U R                  S5      nSnSU R                  0nU R                  R	                  S[        US5      [
        U4[        USU5      [        U4/5        g)zAAdd Language Server routes to the notebook server web applicationr   z(?P<language_server>.*)r   z.*statuswsN)ujoinbase_urllanguage_server_managerweb_appadd_handlersr]   r0   )nbapplsp_urlre_langserversoptss       r   rz   rz      sj    ENNE*G.Nu445D	MM7H%'=tDgt^4.	

r   N)"rX   typingr   r   jupyter_core.utilsr   jupyter_server.base.handlersr   r   jupyter_server.utilsr   rv   tornador	   tornado.websocketr
   jupyter_server.auth.decoratorr   ImportErrorjupyter_server.base.websocketr   jupyter_server.base.zmqhandlersr   r   schemar   specs.utilsr   r<   r   r+   r0   r]   rz   r   r   r   <module>r      s    " + C 7  .8?< + $ &*  5M$&85Mp [  Fy    ?>?s"   A? B ?	B
BBB