
    ^h                          S r SSKrSSKr SSKJr  SSKJr  SSK	J
r
  SSKJr  SSKJr  SS	KJr  S
SKJr  Sr " S S\5      r " S S\5      r " S S\5      rSrS\-  \4S\4/rg! \ a	    SSKJr   Ncf = f)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                       \ rS rSrSr\rSrg)SessionsAPIHandler   zA Sessions API handler. N)__name__
__module____qualname____firstlineno____doc__AUTH_RESOURCEauth_resource__static_attributes__r       c/home/james-whalen/.local/lib/python3.13/site-packages/jupyter_server/services/sessions/handlers.pyr   r      s
    !!Mr   r   c                   t    \ rS rSrSr\R                  \S 5       5       r\R                  \S 5       5       r	Sr
g)SessionRootHandler"   zA Session Root API handler.c                    #    U R                   n[        UR                  5       5      I Sh  vN nU R                  [        R
                  " U[        S95        g N-7f)zGet a list of running sessions.Ndefault)session_managerr   list_sessionsfinishjsondumpsr   )selfsmr   s      r   getSessionRootHandler.get%   sD      !!%b&6&6&899DJJx>? :s   )AA.Ac                   #    U R                   nU R                  5       nUc  [        R                  " SS5      eSU;   aI  U R                  R                  S5        SUS'   SUS   ;   a  US   S   US'   OSUS   ;   a  US   S   US'    US   n US   nUR                  SS5      nUR                  S0 5      nUR                  SS5      nUR                  SS5      n	U	(       d$  U(       d  U R                  R                  S5        Sn[        UR                  US95      I Sh  vN n
U
(       a  UR                  US9I Sh  vN nO UR                  UUU	UUS9I Sh  vN n[)        U R*                  SSUS   5      nU R-                  SU5        U R                  S5        U R                  [         R"                  " U[.        S95        g! [         a  n[        R                  " SS	5      UeSnAff = f! [         a  n[        R                  " SS
5      UeSnAff = f N N N! [         ac    SU-  nSU-  nU R                  R                  SU-  5        U R                  S5        U R                  [         R"                  " XS.5      5         g[$         a&  n[        R                  " S['        U5      5      UeSnAff = f7f)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)r1   )r1   kernel_name	kernel_idr0   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'   modelr1   emtyper0   r2   r4   r5   existss_modelmsg
status_msglocations                  r   post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   BK	G	 G3 BK"H#K HKH# H!H# "A'K	
G0G++G00K3
H=HHKK!H# #A*J>K	J>!J99J>>Kr   N)r   r   r   r   r   r   authenticatedr   r(   rS   r   r   r   r   r   r   "   sK    %@  @ 	B?  B?r   r   c                       \ rS rSrSr\R                  \S 5       5       r\R                  \S 5       5       r	\R                  \S 5       5       r
Srg)SessionHandlert   zA handler for a single session.c                    #    U R                   nUR                  US9I Sh  vN nU R                  [        R                  " U[
        S95        g N-7f)z(Get the JSON model for a single session.
session_idNr   )r!   rD   r#   r$   r%   r   )r&   r[   r'   rK   s       r   r(   SessionHandler.getw   sA      !!nn
n;;DJJul;< <s   AA.Ac           	      N  #    U R                   nU R                  nU R                  5       nUc  [        R                  " SS5      eUR                  US9I Sh  vN n0 nSU;   a4  SUS   ;   a+  U R                  R                  S5        US   S   US'   SUS'   SU;   a  US   US'   S	U;   a  US	   US	'   SU;   a  US   US'   S
U;   a  US
   R                  S5      b,  US
   S   nXs;  a  [        R                  " SSU-  5      eXvS'   OFUS
   R                  S	5      b1  US
   S	   n UR                  UUUS	   US   US   S9I Sh  vN nXvS'   UR$                  " U40 UD6I Sh  vN   UR                  US9I Sh  vN nUS
   S   US
   S   :w  aP  [&        R(                  " [+        UR-                  US
   S   5      5      5      n[/        USS5      (       d
  UI Sh  vN   U R                  [         R"                  " U[0        S95        g GN N! [         a  n	SU< S[        [        U	5      5      < 3n
SU-  nU R                  R                  SU5        U R                  S5        U R                  [         R"                  " XS.5      5         Sn	A	gSn	A	ff = f GN8 GN$ N7f)zPatch updates sessions:

- path updates session to track renamed paths
- kernel.name starts a new kernel with a given kernelspec
Nr+   r,   rZ   r-   r1   r.   r/   r0   r2   r3   zNo such kernel: %sr5   )r4   r0   r1   r/   zThe 'z' kernel could not be started: zError starting kernel %szError starting kernel: %sr6   r7   use_pending_kernelsr   )r!   kernel_managerr=   r   r>   rD   r?   r@   r(   start_kernel_for_sessionrG   reprrH   errorrF   r#   r$   r%   update_sessionasyncioensure_futurer   shutdown_kernelgetattrr   )r&   r[   r'   kmrK   beforechangesr5   r4   rL   rP   rQ   rO   futs                 r   patchSessionHandler.patch   s     !!  ""$=--%<== ~~~<<6U:->#>HHMN!*-f5E&M&E&MU?#FmGFOU?#FmGFOU?#FmGFOuX""4(4!(OD1	&---AI-MNN'0$x$$V,8#Hof5&(&A&A"$/#F^#F^#F^ 'B ' !I ,5K(  
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

s+X YZ 	7= s   AJ%HCJ%'H HH J%%J&J%<J =A!J%J#.J%H 
JA5JJ%JJ% J%#J%c                    #    U R                   n UR                  U5      I Sh  vN   U R                  S5        U R                  5         g N&! [         a  n[        R                  " SS5      UeSnAff = f7f)z)Delete the session with given session_id.Ni  zKernel deleted before session   )r!   delete_sessionrA   r   r>   rF   r#   )r&   r[   r'   rL   s       r   deleteSessionHandler.delete   sm      !!	M##J/// 	 0 	M--%DE1L	Ms7   A7A AA "A7A 
A4A//A44A7r   N)r   r   r   r   r   r   rU   r   r(   rl   rq   r   r   r   r   rW   rW   t   sl    )=  = 	F?  F?P 		  	r   rW   z#(?P<session_id>\w+-\w+-\w+-\w+-\w+)z/api/sessions/%sz/api/sessions)r   rd   r$   jupyter_client.jsonutilr   ImportErrorr   jupyter_client.kernelspecr   jupyter_core.utilsr   tornador   jupyter_server.auth.decoratorr   jupyter_server.utilsr	   base.handlersr   r   r   r   rW   _session_id_regexdefault_handlersr   r   r   <module>r}      s     E4 3 +  4 . '" "O?+ O?d`' `N ;  ,,n=)* a  EDEs   A' 'A65A6