ó
ù2¢\c           @   sÆ   d  Z  d d l 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 d d l m Z d	 e f d
 „  ƒ  YZ d e f d „  ƒ  YZ d Z d e e f d e f g Z d S(   sÀ   Tornado 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
iÿÿÿÿN(   t   gent   webi   (   t
   APIHandler(   t   date_default(   t   url_path_join(   t   NoSuchKernelt   SessionRootHandlerc           B   s>   e  Z e j e j d  „  ƒ ƒ Z e j e j d „  ƒ ƒ Z RS(   c         c   s?   |  j  } t j | j ƒ  ƒ V} |  j t j | d t ƒƒ d  S(   Nt   default(   t   session_managerR    t   maybe_futuret   list_sessionst   finisht   jsont   dumpsR   (   t   selft   smt   sessions(    (    sB   lib/python2.7/site-packages/notebook/services/sessions/handlers.pyt   get   s    	c         c   s™  |  j  } |  j ƒ  } | d  k r6 t j d d ƒ ‚ n  d | k r d | d k r |  j j d ƒ | d d | d <d | d <n  y | d } Wn# t k
 r´ t j d d ƒ ‚ n Xy | d } Wn# t k
 rè t j d d ƒ ‚ n X| j d	 d  ƒ } | j d
 i  ƒ } | j d	 d  ƒ } | j d d  ƒ } | rX| rX|  j j	 d ƒ d  } n  t
 j | j d | ƒ ƒ V}	 |	 r™t
 j | j d | ƒ ƒ V} n§ y8 t
 j | j d | d | d | d	 | d | ƒ ƒ V} Wnl t k
 r?d | }
 d | } |  j j d | ƒ |  j d ƒ |  j t j t d |
 d | ƒ ƒ ƒ d  SXt |  j d d | d ƒ } |  j d | ƒ |  j d ƒ |  j t j | d t ƒƒ d  S(   Ni  s   No JSON data providedt   notebookt   paths.   Sessions API changed, see updated swagger docst   types    Missing field in JSON data: paths    Missing field in JSON data: typet   namet   kernelt   ids)   No kernel specified, using default kernelt   kernel_namet	   kernel_idsf   The '%s' kernel is not available. Please pick another suitable kernel instead, or install that kernel.s   %s not founds   Kernel not found: %siõ  t   messaget   short_messaget   apiR   t   LocationiÉ   R   (   R   t   get_json_bodyt   NoneR   t	   HTTPErrort   logt   warningt   KeyErrorR   t   debugR    R	   t   session_existst   get_sessiont   create_sessionR   t
   set_statusR   R   R   t   dictR   t   base_urlt
   set_headerR   (   R   R   t   modelR   t   mtypeR   R   R   R   t   existst   msgt
   status_msgt   location(    (    sB   lib/python2.7/site-packages/notebook/services/sessions/handlers.pyt   post   sV    		
%(   t   __name__t
   __module__R   t   authenticatedR    t	   coroutineR   R2   (    (    (    sB   lib/python2.7/site-packages/notebook/services/sessions/handlers.pyR      s   t   SessionHandlerc           B   sY   e  Z e j e j d  „  ƒ ƒ Z e j e j d „  ƒ ƒ Z e j e j d „  ƒ ƒ Z RS(   c         c   sE   |  j  } t j | j d | ƒ ƒ V} |  j t j | d t ƒƒ d  S(   Nt
   session_idR   (   R   R    R	   R&   R   R   R   R   (   R   R8   R   R,   (    (    sB   lib/python2.7/site-packages/notebook/services/sessions/handlers.pyR   [   s    	c   	      c   sg  |  j  } |  j } |  j ƒ  } | d k r? t j d d ƒ ‚ n  t j | j d | ƒ ƒ V} i  } d | k r¬ d | d k r¬ |  j	 j
 d ƒ | d d | d <d | d <n  d | k rÉ | d | d <n  d | k ræ | d | d <n  d | k r| d | d <n  d	 | k rÓ| d	 j d
 ƒ d k	 rh| d	 d
 } | | k r[t j d d | ƒ ‚ n  | | d <qÓ| d	 j d ƒ d k	 rÓ| d	 d } | j | d | d | d d | d d | d ƒV} | | d <qÓn  t j | j | |  ƒ Vt j | j d | ƒ ƒ V} | d	 d
 | d	 d
 k rGt j | j | d	 d
 ƒ ƒ Vn  |  j t j | d t ƒƒ d S(   s™   Patch updates sessions:

        - path updates session to track renamed paths
        - kernel.name starts a new kernel with a given kernelspec
        i  s   No JSON data providedR8   R   R   s.   Sessions API changed, see updated swagger docsR   R   R   R   s   No such kernel: %sR   R   R   N(   R   t   kernel_managerR   R   R   R    R    R	   R&   R!   R"   R   t   start_kernel_for_sessiont   update_sessiont   shutdown_kernelR   R   R   R   (	   R   R8   R   t   kmR,   t   beforet   changesR   R   (    (    sB   lib/python2.7/site-packages/notebook/services/sessions/handlers.pyt   patchc   sF    		c         c   se   |  j  } y t j | j | ƒ ƒ VWn# t k
 rI t j d d ƒ ‚ n X|  j d ƒ |  j ƒ  d  S(   Niš  s   Kernel deleted before sessioniÌ   (	   R   R    R	   t   delete_sessionR#   R   R    R(   R   (   R   R8   R   (    (    sB   lib/python2.7/site-packages/notebook/services/sessions/handlers.pyt   delete˜   s    	(	   R3   R4   R   R5   R    R6   R   R@   RB   (    (    (    sB   lib/python2.7/site-packages/notebook/services/sessions/handlers.pyR7   Y   s   4s#   (?P<session_id>\w+-\w+-\w+-\w+-\w+)s   /api/sessions/%ss   /api/sessions(   t   __doc__R   t   ost   tornadoR    R   t   base.handlersR   t   jupyter_client.jsonutilR   t   notebook.utilsR   t   jupyter_client.kernelspecR   R   R7   t   _session_id_regext   default_handlers(    (    (    sB   lib/python2.7/site-packages/notebook/services/sessions/handlers.pyt   <module>   s   EQ