
    h                          d Z ddlZddl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d	lmZ d
dlmZ dZ G d de      Z G d de      Z G d de      ZdZdez  efdefgZy# e$ r	 ddlmZ Y bw xY w)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                       e Zd ZdZeZy)SessionsAPIHandlerzA Sessions API handler.N)__name__
__module____qualname____doc__AUTH_RESOURCEauth_resource     ]/var/www/html/myenv/lib/python3.12/site-packages/jupyter_server/services/sessions/handlers.pyr   r      s
    !!Mr   r   c                   l    e Zd ZdZej
                  ed               Zej
                  ed               Zy)SessionRootHandlerzA Session Root API handler.c                    K   | j                   }t        |j                                d{   }| j                  t	        j
                  |t                     y7 /w)zGet a list of running sessions.Ndefault)session_managerr   list_sessionsfinishjsondumpsr   )selfsmr   s      r   getzSessionRootHandler.get%   sE      !!%b&6&6&899DJJx>? :s   )AA0Ac                 `  K   | j                   }| j                         }|t        j                  dd      d|v rE| j                  j                  d       d|d<   d|d   v r|d   d   |d<   nd|d   v r|d   d   |d<   	 |d   }	 |d   }|j                  dd      }|j                  di       }|j                  dd      }|j                  dd      }	|	s|s| j                  j                  d       d}t        |j                  |             d{   }
|
r|j                  |       d{   }n	 |j                  |||	||       d{   }t)        | j*                  dd|d         }| j-                  d|       | j                  d       | j                  t!        j"                  |t.                     y# t        $ r}t        j                  dd	      |d}~ww xY w# t        $ r}t        j                  dd
      |d}~ww xY w7 7 7 # t        $ rc d|z  }d|z  }| j                  j                  d|z         | j                  d       | j                  t!        j"                  ||d             Y yt$        $ r%}t        j                  dt'        |            |d}~ww xY ww)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/   r0   existss_modelmsg
status_msglocations                  r   postzSessionRootHandler.post-   s    
 !!""$=--%<==HHMN&E&Mz** %j 1& 9f5,, %j 1& 9f	P =D	P&ME yy&8R(jj.JJtT*	HHNNFGK#B$5$54$5$@AANNN55G8 " 1 1 +' !2 ! ( !z74=Q
H-DJJw=>[  	P--%GHaO	P
  	P--%GHaO	P B5   	GITU  ,k9
  !7+!EF$DJJ3'TUV 8mmCQ0a78s   A>J.F= G% BJ.HJ./H0J.6H HH A)J.=	G"GG""J.%	H
.HH

J.J.H A)J+<J.>J+ J&&J++J.N)	r   r   r   r   r   authenticatedr   r$   rN   r   r   r   r   r   "   sK    %@  @ 	B?  B?r   r   c                       e Zd ZdZej
                  ed               Zej
                  ed               Zej
                  ed               Z	y)SessionHandlerzA handler for a single session.c                    K   | j                   }|j                  |       d{   }| j                  t        j                  |t
                     y7 /w)z(Get the JSON model for a single session.
session_idNr   )r   r?   r   r    r!   r   )r"   rT   r#   rF   s       r   r$   zSessionHandler.getw   sB      !!nn
n;;DJJul;< <s   "AA0Ac           	      0  K   | j                   }| j                  }| j                         }|t        j                  dd      |j                  |       d{   }i }d|v r2d|d   v r+| j                  j                  d       |d   d   |d<   d|d<   d|v r|d   |d<   d	|v r|d	   |d	<   d|v r|d   |d<   d
|v r|d
   j                  d      +|d
   d   }||vrt        j                  dd|z        ||d<   nI|d
   j                  d	      5|d
   d	   }	 |j                  |||d	   |d   |d          d{   }||d<    |j$                  |fi | d{    |j                  |       d{   }|d
   d   |d
   d   k7  rJt'        j(                  t+        |j-                  |d
   d                     }t/        |dd      s
| d{    | j                  t!        j"                  |t0                     y7 7 # t        $ r}}	d|dt        t        |	            }
d|z  }| j                  j                  d|       | j                  d       | j                  t!        j"                  |
|d             Y d}	~	yd}	~	ww xY w7 37 7 íw)zPatch updates sessions:

        - path updates session to track renamed paths
        - kernel.name starts a new kernel with a given kernelspec
        Nr&   r'   rS   r(   r,   r)   r*   r+   r-   r.   zNo such kernel: %sr0   )r/   r+   r,   r*   zThe 'z' kernel could not be started: zError starting kernel %szError starting kernel: %sr1   r2   use_pending_kernelsr   )r   kernel_managerr8   r   r9   r?   r:   r;   r$   start_kernel_for_sessionrB   reprrC   errorrA   r   r    r!   update_sessionasyncioensure_futurer   shutdown_kernelgetattrr   )r"   rT   r#   kmrF   beforechangesr0   r/   rG   rK   rL   rJ   futs                 r   patchzSessionHandler.patch   s     !!  ""$=--%<== ~~~<<6U:->#>HHMN!*-f5E&M&E&MU?#FmGFOU?#FmGFOU?#FmGFOuX""4(4!(OD1	B&---AI-MNN'0$x$$V,8#Hof5&(&A&A"$/#F^#F^#F^ 'B ' !I ,5GK(   b
6g666*==8T"fX&6t&<< ''R5G5GxHXY]H^5_(`aC24d;		DJJw=>s =0! !  $SVC "<k!IJHHNN#>LOOC(KK

sZ+X YZ 	7= s   AJH B?J"H ;H<	H JJJ5J6AJJ0JH 	JA3JJJJJJc                    K   | j                   }	 |j                  |       d{    | j                  d       | j                          y7 &# t        $ r}t        j                  dd      |d}~ww xY ww)z)Delete the session with given session_id.Ni  zKernel deleted before session   )r   delete_sessionr<   r   r9   rA   r   )r"   rT   r#   rG   s       r   deletezSessionHandler.delete   sn      !!	M##J/// 	 0 	M--%DE1L	Ms7   A5A AA "A5A 	A2A--A22A5N)
r   r   r   r   r   rO   r   r$   rd   rh   r   r   r   rQ   rQ   t   sl    )=  = 	F?  F?P 		  	r   rQ   z#(?P<session_id>\w+-\w+-\w+-\w+-\w+)z/api/sessions/%sz/api/sessions)r   r\   r    jupyter_client.jsonutilr   ImportErrorr   jupyter_client.kernelspecr   jupyter_core.utilsr   tornador   jupyter_server.auth.decoratorr   jupyter_server.utilsr	   base.handlersr   r   r   r   rQ   _session_id_regexdefault_handlersr   r   r   <module>rs      s     E4 3 +  4 . '" "O?+ O?d`' `N ;  ,,n=)* a  EDEs   A' 'A54A5