
    Ib                         d Z ddlZddlmZmZ ddlmZ 	 ddlmZ ddlmZmZ dd	lmZ  G d
 de      Z G d de      ZdZde efdefgZy# e	$ r	 ddlm
Z Y ?w 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)genweb   )
APIHandler)json_default)date_default)maybe_futureurl_path_join)NoSuchKernelc                       e Zd Zej                  ej                  d               Zej                  ej                  d               Zy)SessionRootHandlerc              #      K   | j                   }t        |j                               }| j                  t	        j
                  |t                     y w)Ndefault)session_managerr	   list_sessionsfinishjsondumpsr   )selfsmsessionss      E/usr/lib/python3/dist-packages/notebook/services/sessions/handlers.pygetzSessionRootHandler.get   s@      !!%b&6&6&899DJJx>?s   AAc           	   #     K   | j                   }| j                         }|t        j                  dd      d|v r2d|d   v r+| j                  j                  d       |d   d   |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                  |            }
|
rt        |j                  |            }n"	 t        |j                  |||	||            }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# t        $ rl d| d}| d}| j                  j                  d|        | j                  d       | j                  t!        j"                  t%        ||                   Y y w xY ww)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locations                 r   postzSessionRootHandler.post"   st    
 !!""$=--%<==6U:->#>HHMN!*-f5E&M&E&M	P=D	P&ME yy&8R(jj.JJtT*	HHNNFGK#B$5$54$5$@AA&r~~4~'@AAE*%%4[09+0 & 23 3 !z5;O
H-DJJul;<Q  	P--%GHaO	P
  	P--%GHaO	P*   	K= )[ \  !,}J7
  #5k]!CD$DJJtCz'RST	so   A+I2.F* 4G 9B&I2 !G: A)I2*	G3G

GI2	G7G22G77I2:A2I/,I2.I//I2N)	__name__
__module____qualname__r   authenticatedr   	coroutiner   r@        r   r   r      sN    ]]@  @ 	]]8=  8=rG   r   c                       e Zd Zej                  ej                  d               Zej                  ej                  d               Zej                  ej                  d               Z	y)SessionHandlerc              #      K   | j                   }t        |j                  |            }| j                  t	        j
                  |t                     y w)N
session_idr   )r   r	   r3   r   r   r   r   )r   rL   r   r9   s       r   r   zSessionHandler.geta   sB      !!"2>>Z>#HIIDJJul;<s   AAc              #     K   | j                   }| j                  }| j                         }|t        j                  dd      t        |j                  |            }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|       ||d<   nB|d
   j                  d	      .|d
   d	   }|j                  |||d	   |d   |d         }||d<   t         |j                  |fi |       t        |j                  |            }|d
   d   |d
   d   k7  r"t        |j                  |d
   d                | j                  t        j                  |t                      yw)zPatch updates sessions:

        - path updates session to track renamed paths
        - kernel.name starts a new kernel with a given kernelspec
        Nr   r   rK   r   r   r    r!   r"   r#   r$   zNo such kernel: r&   )r%   r"   r   r!   r   )r   kernel_managerr,   r   r-   r	   r3   r.   r/   r   start_kernel_for_sessionupdate_sessionshutdown_kernelr   r   r   r   )	r   rL   r   kmr9   beforechangesr&   r%   s	            r   patchzSessionHandler.patchi   s)     !!  ""$=--%<== $BNNjN$IJJ6U:->#>HHMN!*-f5E&M&E&MU?#FmGFOU?#FmGFOU?#FmGFOuX""4(4!(OD1	B&--/?	{-KLL'0$x$$V,8#Hof5"$"="=KfVnfVn #> #> >	 (1$,2,,ZC7CDD"2>>Z>#HII?4 F8$4T$:: ""6(#3D#9:  	DJJul;<s   GGc              #      K   | j                   }	 t        |j                  |             | j                  d       | j                          y # t        $ r}t	        j
                  dd      |d }~ww xY ww)Ni  zKernel deleted before session   )r   r	   delete_sessionr0   r   r-   r5   r   )r   rL   r   r:   s       r   deletezSessionHandler.delete   sm      !!	Mr00<== 		  	M--%DE1L	Ms'   A6A "A6	A3A..A33A6N)
rA   rB   rC   r   rD   r   rE   r   rU   rY   rF   rG   r   rI   rI   _   ss    ]]=  = 	]]1=  1=f 	]]	  	rG   rI   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   rI   _session_id_regexdefault_handlersrF   rG   r   <module>rc      s      '4
 7 2D= D=NJZ Jb ;  	()*N;*+ E  s   A AA