B
    3¢\>  ã               @   s   d Z ddlZddlZddlZejjZddlmZ ddl	m
Z
 ddlmZmZ dd„ ZG d	d
„ d
e
ƒZG dd„ de
ƒZdZdefde efgZdS )z¤Tornado handlers for kernel specifications.

Preliminary documentation at https://github.com/ipython/ipython/wiki/IPEP-25%3A-Registry-of-installed-kernels#rest-api
é    N)Úwebé   )Ú
APIHandler)Úurl_path_joinÚurl_unescapec       
      C   sš   ||i dœ}|}x6dD ].}t j t||ƒ¡rt| jd||ƒ|d |< qW xLt t|dƒ¡D ]8}t j |¡}t j |¡\}}	t| jd||ƒ|d |< qZW |S )z7Load a KernelSpec by name and return the REST API model)ÚnameÚspecÚ	resources)z	kernel.jsz
kernel.cssÚkernelspecsr	   zlogo-*)	ÚosÚpathÚexistsÚpjoinr   Zbase_urlÚglobÚbasenameÚsplitext)
Zhandlerr   Z	spec_dictÚresource_dirÚdÚresourceZ	logo_fileÚfnameZno_extÚ_© r   úElib/python3.7/site-packages/notebook/services/kernelspecs/handlers.pyÚkernelspec_model   s(    
r   c               @   s   e Zd Zejdd„ ƒZdS )ÚMainKernelSpecHandlerc          	   C   s¬   | j }| j}i }|j|d< i  |d< }xd| ¡  ¡ D ]T\}}yt| ||d |d ƒ}W n( tk
r~   | jjd|dd w4Y nX |||< q4W |  	dd	¡ |  
t |¡¡ d S )
NÚdefaultr
   r   r   z Failed to load kernel spec: '%s'T)Úexc_infozContent-Typezapplication/json)Úkernel_spec_managerZkernel_managerZdefault_kernel_nameZget_all_specsÚitemsr   Ú	ExceptionÚlogÚerrorÚ
set_headerÚfinishÚjsonÚdumps)ÚselfÚksmZkmÚmodelZspecsÚkernel_nameZkernel_infor   r   r   r   Úget2   s    
zMainKernelSpecHandler.getN)Ú__name__Ú
__module__Ú__qualname__r   Úauthenticatedr*   r   r   r   r   r   0   s   r   c               @   s   e Zd Zejdd„ ƒZdS )ÚKernelSpecHandlerc             C   sv   | j }t|ƒ}y| |¡}W n$ tk
r@   t dd| ¡‚Y nX t| || ¡ |jƒ}|  	dd¡ |  
t |¡¡ d S )Ni”  zKernel spec %s not foundzContent-Typezapplication/json)r   r   Zget_kernel_specÚKeyErrorr   Z	HTTPErrorr   Zto_dictr   r"   r#   r$   r%   )r&   r)   r'   r   r(   r   r   r   r*   G   s    zKernelSpecHandler.getN)r+   r,   r-   r   r.   r*   r   r   r   r   r/   E   s   r/   z(?P<kernel_name>[\w\.\-%]+)z/api/kernelspecsz/api/kernelspecs/%s)Ú__doc__r   r$   r   r   Újoinr   Ztornador   Zbase.handlersr   Zutilsr   r   r   r   r/   Zkernel_name_regexZdefault_handlersr   r   r   r   Ú<module>   s   