o
    iI                     @   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/var/www/edux/Edux_v2/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: %si  )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msg
status_msglocationr   r   r   post,   sx   

zSessionRootHandler.postN)	r   r   r   r   r   authenticatedr   r   rF   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   r8   r   r   r   r   )r   rJ   r   r?   r   r   r   r   v   r    zSessionHandler.getc           
         s  | 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< n&|d
 d	dur|d
 d	 }|j	|||d	 |d |d dI dH }||d< |j
|fi |I dH  |j|dI dH }|d
 d |d
 d krt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"   rI   r#   r'   r$   r%   r&   r(   r)   zNo such kernel: %sr+   )r*   r&   r'   r%   use_pending_kernelsr   )r   kernel_managerr1   r   r2   r8   r3   r4   r   start_kernel_for_sessionupdate_sessionasyncioensure_futurer   shutdown_kernelgetattrr   r   r   r   )
r   rJ   r   kmr?   beforechangesr+   r*   futr   r   r   patch~   sR   

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_sessionr5   r   r2   r:   r   )r   rJ   r   r@   r   r   r   delete   s   
zSessionHandler.deleteN)
r   r   r   r   r   rG   r   r   rW   rZ   r   r   r   r   rH   s   s    8rH   z#(?P<session_id>\w+-\w+-\w+-\w+-\w+)z/api/sessions/%sz/api/sessions)r   rO   r   jupyter_client.jsonutilr   ImportErrorr   jupyter_client.kernelspecr   jupyter_core.utilsr   tornador   jupyter_server.authr   jupyter_server.utilsr   base.handlersr
   r   r   r   rH   _session_id_regexdefault_handlersr   r   r   r   <module>   s,    RW
