o
    i                     @   s   d Z ddlmZmZ ddlmZ ddlmZmZ ddl	m
Z ddlmZ ddlmZ dd	lmZ G d
d deZG dd deeeZG dd deZdd ZdS )zF tornado handler for managing and communicating with language servers
    )OptionalText)JupyterHandler)WebSocketHandlerWebSocketMixin)url_path_join   )LanguageServerManager)SERVERS_RESPONSEcensored_specc                   @   s   e Zd ZdZdefddZdS )BaseHandlerNmanagerc                 C   s
   || _ d S N)r   )selfr    r   O/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/jupyter_lsp/handlers.py
initialize   s   
zBaseHandler.initialize)__name__
__module____qualname__r   r	   r   r   r   r   r   r      s    r   c                       s4   e Zd ZdZdZ fddZdd Zdd Z  ZS )	LanguageServerWebSocketHandlerz<Setup tornado websocket to route to language server sessionsNc                    sF   | j  I d H  || _| j |  | jd| j t   d S )Nz[{}] Opened a handler)	r   readylanguage_server	subscribelogdebugformatsuperopen)r   r   	__class__r   r   r      s   z#LanguageServerWebSocketHandler.openc                    s.   | j d| j | j|| I d H  d S )Nz[{}] Handling a message)r   r   r   r   r   on_client_message)r   messager   r   r   
on_message#   s   z)LanguageServerWebSocketHandler.on_messagec                 C   s$   | j |  | jd| j d S )Nz[{}] Closed a handler)r   unsubscriber   r   r   r   )r   r   r   r   on_close'   s   z'LanguageServerWebSocketHandler.on_close)	r   r   r   __doc__r   r   r$   r&   __classcell__r   r   r    r   r      s    r   c                       s,   e Zd ZdZeZ fddZdd Z  ZS )LanguageServersHandlerzsReports the status of all current servers

    Response should conform to schema in schema/servers.schema.json
    c                    s   t  j|i | d S r   )r   r   )r   argskwargsr    r   r   r   4   s   z!LanguageServersHandler.initializec                    s|   | j  I dH  ddd | j j D dd | j j D d}t| j|}|r7| j	d
t|| | | dS )z4finish with the JSON representations of the sessionsN   c                 S   s   i | ]	\}}||  qS r   )to_json).0r   sessionr   r   r   
<dictcomp>=       z.LanguageServersHandler.get.<locals>.<dictcomp>c                 S   s   i | ]	\}}|t |qS r   r   )r.   keyspecr   r   r   r0   A   r1   )versionsessionsspecsz{} validation errors: {})r   r   r5   itemsall_language_serverslist	validatoriter_errorsr   warningr   lenfinish)r   responseerrorsr   r   r   get7   s   

zLanguageServersHandler.get)	r   r   r   r'   r
   r:   r   rA   r(   r   r   r    r   r)   ,   s
    r)   c                 C   sJ   t | jd}d}d| ji}| jdt |dt|ft |d|t|fg dS )zAAdd Language Server routes to the notebook server web applicationlspz(?P<language_server>.*)r   z.*statuswsN)ujoinbase_urllanguage_server_managerweb_appadd_handlersr)   r   )nbapplsp_urlre_langserversoptsr   r   r   rI   O   s   

rI   N)r'   typingr   r   jupyter_server.base.handlersr   jupyter_server.base.zmqhandlersr   r   jupyter_server.utilsr   rE   r   r	   schemar
   specs.utilsr   r   r   r)   rI   r   r   r   r   <module>   s    
#