o
    ^i                      @   s   d Z ddl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 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dZde efdefgZdS )zTornado handlers for the sessions web service.

Preliminary documentation at https://github.com/ipython/ipython/wiki/IPEP-16%3A-Notebook-multi-directory-dashboard-and-URL-mapping#sessions-api
    N)json_default)date_default)NoSuchKernel)ensure_async)web)
authorized)url_path_join   )
APIHandlersessionsc                   @   s   e Zd ZdZeZdS )SessionsAPIHandlerzA Sessions API handler.N)__name__
__module____qualname____doc__AUTH_RESOURCEauth_resource r   r   d/home/ubuntu/hpml_nyu/venv/lib/python3.10/site-packages/jupyter_server/services/sessions/handlers.pyr      s    r   c                   @   s4   e Zd ZdZejedd Zejedd ZdS )SessionRootHandlerzA Session Root API handler.c                    s2   | j }t| I dH }| tj|td dS )zGet a list of running sessions.Ndefault)session_managerr   list_sessionsfinishjsondumpsr   )selfsmr   r   r   r   get%      zSessionRootHandler.getc              
      s6  | j }|  }|du rtddd|v r=| jd d|d< d|d v r/|d d |d< nd|d v r=|d d |d< z|d }W n tyV } ztdd	|d}~ww z|d }W n typ } ztdd
|d}~ww |dd}|di }|dd}|dd}	|	s|s| jd d}t	|j
|dI dH }
|
r|j|dI dH }nNz|j|||	||dI dH }W n> ty   d| }d| }| jd|  | d | t||d Y dS  ty } z	tdt||d}~ww t| jdd|d }| d| | d | tj|td dS )zCreate a new session.N  No JSON data providednotebook.Sessions API changed, see updated swagger docstypenamepathz Missing field in JSON data: pathz Missing field in JSON data: typekernelidz)No kernel specified, using default kernel)r'   )r'   kernel_name	kernel_idr&   r%   zfThe '%s' kernel is not available. Please pick another suitable kernel instead, or install that kernel.z%s not foundzKernel not found: %s  messageshort_messagei  apir   Location   r   )r   get_json_bodyr   	HTTPErrorlogwarningKeyErrorr   debugr   session_existsget_sessioncreate_sessionr   
set_statusr   r   r   	Exceptionstrr   base_url
set_headerr   )r   r   modelr'   emtyper&   r(   r*   r+   existss_modelmsg
status_msglocationr   r   r   post-   sx   

zSessionRootHandler.postN)	r   r   r   r   r   authenticatedr   r   rI   r   r   r   r   r   "   s    r   c                   @   sF   e Zd ZdZejedd Zejedd Zejedd Z	dS )	SessionHandlerzA handler for a single session.c                    s2   | j }|j|dI dH }| tj|td dS )z(Get the JSON model for a single session.
session_idNr   )r   r:   r   r   r   r   )r   rM   r   rA   r   r   r   r   w   r    zSessionHandler.getc              
      sN  | j }| j}|  }|du rtdd|j|dI dH }i }d|v r<d|d v r<| jd |d d |d< d|d< d|v rF|d |d< d	|v rP|d	 |d	< d|v rZ|d |d< d
|v r|d
 ddur~|d
 d }||vrytdd| ||d< na|d
 d	dur|d
 d	 }z|j	|||d	 |d |d dI dH }||d< W n8 t
y }	 z,d|tt|	f }
d| }| jd| | d | t|
|d W Y d}	~	dS d}	~	ww |j|fi |I dH  |j|dI dH }|d
 d |d
 d krtt||d
 d }t|dds|I dH  | tj|td dS )zPatch updates sessions:

        - path updates session to track renamed paths
        - kernel.name starts a new kernel with a given kernelspec
        Nr!   r"   rL   r#   r'   r$   r%   r&   r(   r)   zNo such kernel: %sr+   )r*   r&   r'   r%   z(The '%s' kernel could not be started: %szError starting kernel %szError starting kernel: %sr,   r-   use_pending_kernelsr   )r   kernel_managerr3   r   r4   r:   r5   r6   r   start_kernel_for_sessionr=   reprr>   errorr<   r   r   r   update_sessionasyncioensure_futurer   shutdown_kernelgetattrr   )r   rM   r   kmrA   beforechangesr+   r*   rB   rF   rG   rE   futr   r   r   patch   sl   



zSessionHandler.patchc              
      sZ   | j }z
||I dH  W n ty! } ztdd|d}~ww | d |   dS )z)Delete the session with given session_id.Ni  zKernel deleted before session   )r   delete_sessionr7   r   r4   r<   r   )r   rM   r   rB   r   r   r   delete   s   
zSessionHandler.deleteN)
r   r   r   r   r   rJ   r   r   r\   r_   r   r   r   r   rK   t   s    HrK   z#(?P<session_id>\w+-\w+-\w+-\w+-\w+)z/api/sessions/%sz/api/sessions)r   rT   r   jupyter_client.jsonutilr   ImportErrorr   jupyter_client.kernelspecr   jupyter_core.utilsr   tornador   jupyter_server.auth.decoratorr   jupyter_server.utilsr   base.handlersr
   r   r   r   rK   _session_id_regexdefault_handlersr   r   r   r   <module>   s,    Rg
