o
    i                     @   s   d Z ddlZddlmZmZ ddlmZ zddlmZ W n e	y+   ddlm
Z Y nw ddlmZmZ dd	lm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)genweb   )
APIHandler)json_default)date_default)maybe_futureurl_path_join)NoSuchKernelc                   @   s4   e Zd Zejejdd Zejejdd ZdS )SessionRootHandlerc                 c   s.    | j }t| V }| tj|td d S )Ndefault)session_managerr   list_sessionsfinishjsondumpsr   )selfsmsessions r   ^/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/notebook/services/sessions/handlers.pyget   s   zSessionRootHandler.getc                 c   s   | j }|  }|d u rtddd|v r.d|d v r.| jd |d d |d< d|d< z|d }W n tyG } ztdd|d }~ww z|d }W n tya } ztdd|d }~ww |d	d }|d
i }|d	d }|dd }	|	s|s| jd d }t	|j
|dV }
|
rt	|j|dV }n?zt	|j|||	||dV }W n/ ty   d| d}| d}| jd|  | d | tt||d Y d S w t| jdd|d }| d| | d | tj|td d S )N  No JSON data providednotebookpath.Sessions API changed, see updated swagger docstypez Missing field in JSON data: pathz Missing field in JSON data: typenamekernelidz)No kernel specified, using default kernel)r   )r   kernel_name	kernel_idr   r   zThe 'z_' kernel is not available. Please pick another suitable kernel instead, or install that kernel.z
 not foundzKernel not found: i  )messageshort_messageapir   Location   r   )r   get_json_bodyr   	HTTPErrorlogwarningKeyErrorr   debugr   session_existsget_sessioncreate_sessionr
   
set_statusr   r   r   dictr	   base_url
set_headerr   )r   r   modelr   emtyper   r    r"   r#   existsmsg
status_msglocationr   r   r   post"   sf   




zSessionRootHandler.postN)	__name__
__module____qualname__r   authenticatedr   	coroutiner   r=   r   r   r   r   r      s    r   c                   @   sH   e Zd Zejejdd Zejejdd Zejejdd Z	dS )SessionHandlerc                 c   s2    | j }t|j|dV }| tj|td d S )N
session_idr   )r   r   r0   r   r   r   r   )r   rE   r   r6   r   r   r   r   a   s   zSessionHandler.getc           	      c   s   | j }| j}|  }|du rtddt|j|dV }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rztdd| ||d< n$|d
 	d	dur|d
 d	 }|j
|||d	 |d |d dV }||d< t|j|fi |V  t|j|dV }|d
 d |d
 d krt||d
 d V  | 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   rD   r   r   r   r   r   r    r!   zNo such kernel: r#   )r"   r   r   r   r   )r   kernel_managerr)   r   r*   r   r0   r+   r,   r   start_kernel_for_sessionupdate_sessionshutdown_kernelr   r   r   r   )	r   rE   r   kmr6   beforechangesr#   r"   r   r   r   patchi   sL   

zSessionHandler.patchc              
   c   sZ    | j }z
t||V  W n ty! } ztdd|d }~ww | d |   d S )Ni  zKernel deleted before session   )r   r   delete_sessionr-   r   r*   r2   r   )r   rE   r   r7   r   r   r   delete   s   
zSessionHandler.deleteN)
r>   r?   r@   r   rA   r   rB   r   rM   rP   r   r   r   r   rC   _   s    3rC   z#(?P<session_id>\w+-\w+-\w+-\w+-\w+)z/api/sessions/z/api/sessions)__doc__r   tornador   r   base.handlersr   jupyter_client.jsonutilr   ImportErrorr   notebook.utilsr   r	   jupyter_client.kernelspecr
   r   rC   _session_id_regexdefault_handlersr   r   r   r   <module>   s"    GQ