o
    ^i.                     @   s  d Z ddlZzddlmZ W n ey   ddlmZ Y nw ddlmZ ddl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ZG dd deZG dd deZG dd deZG dd deZdZdZdefde efde de efde efgZdS )zTornado handlers for kernels.

Preliminary documentation at https://github.com/ipython/ipython/wiki/IPEP-16%3A-Notebook-multi-directory-dashboard-and-URL-mapping#kernels-api
    N)json_default)date_default)ensure_async)web)
authorized)
url_escapeurl_path_join   )
APIHandler   )KernelWebsocketHandlerkernelsc                   @   s   e Zd ZdZeZdS )KernelsAPIHandlerzA kernels API handler.N)__name__
__module____qualname____doc__AUTH_RESOURCEauth_resource r   r   c/home/ubuntu/hpml_nyu/venv/lib/python3.10/site-packages/jupyter_server/services/kernels/handlers.pyr      s    r   c                   @   4   e Zd ZdZejedd Zejedd ZdS )MainKernelHandlerzThe root kernel handler.c                    s2   | j }t| I dH }| tj|td dS )z Get the list of running kernels.Ndefault)kernel_managerr   list_kernelsfinishjsondumpsr   )selfkmr   r   r   r   get$   s   zMainKernelHandler.getc                    s   | j }|  }|du rd|ji}n|d|j t|j|d |ddI dH }t||I dH }t| j	ddt
|}| d| | d | tj|td	 dS )
zStart a kernel.Nnamepath)kernel_namer$   apir   Location   r   )r   get_json_bodydefault_kernel_name
setdefaultr   start_kernelr"   kernel_modelr   base_urlr   
set_header
set_statusr   r   r   r   )r    r!   model	kernel_idlocationr   r   r   post,   s    

zMainKernelHandler.postN)	r   r   r   r   r   authenticatedr   r"   r4   r   r   r   r   r   !       r   c                   @   r   )KernelHandlerzA kernel API handler.c                    s4   | j }t||I dH }| tj|td dS )zGet a kernel model.Nr   )r   r   r-   r   r   r   r   )r    r2   r!   r1   r   r   r   r"   F   s   zKernelHandler.getc                    s2   | j }t||I dH  | d |   dS )zRemove a kernel.N   )r   r   shutdown_kernelr0   r   )r    r2   r!   r   r   r   deleteN   s
   
zKernelHandler.deleteN)	r   r   r   r   r   r5   r   r"   r:   r   r   r   r   r7   C   r6   r7   c                   @   s"   e Zd ZdZejedd ZdS )KernelActionHandlerzA kernel action API handler.c              
      s   | j }|dkrt||I dH  | d |dkr]z
||I dH  W n# tyH   d}| jj|dd | t	
|dd	 | d
 Y nw t||I dH }| t	j
|td |   dS )zInterrupt or restart a kernel.	interruptNr8   restartzException restarting kernelT)exc_info )message	tracebacki  r   )r   r   interrupt_kernelr0   restart_kernel	Exceptionlogerrorwriter   r   r-   r   r   )r    r2   actionr!   r@   r1   r   r   r   r4   [   s"   
zKernelActionHandler.postN)r   r   r   r   r   r5   r   r4   r   r   r   r   r;   X   s
    r;   z"(?P<kernel_id>\w+-\w+-\w+-\w+-\w+)z(?P<action>restart|interrupt)z/api/kernelsz/api/kernels/%sz/api/kernels//z/api/kernels/%s/channels)r   r   jupyter_client.jsonutilr   ImportErrorr   jupyter_core.utilsr   tornador   jupyter_server.auth.decoratorr   jupyter_server.utilsr   r   base.handlersr
   	websocketr   r   r   r   r7   r;   _kernel_id_regex_kernel_action_regexdefault_handlersr   r   r   r   <module>   s6    "

