o
    i@                     @   s   d Z ddlZddlZddlZejjZddlmZm	Z	 ddl
mZ ddlmZmZmZ dd 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 )zTornado handlers for kernel specifications.

Preliminary documentation at https://github.com/ipython/ipython/wiki/IPEP-25%3A-Registry-of-installed-kernels#rest-api
    N)webgen   )
APIHandler)maybe_futureurl_path_joinurl_unescapec           
      C   s   ||i d}dD ]}t jt||rt| jd|||d |< qtt|dD ]}t j|}t j|\}}	t| jd|||d |< q(|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   base_urlglobbasenamesplitext)
handlerr	   	spec_dictresource_dirdresource	logo_filefnameno_ext_ r   a/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/notebook/services/kernelspecs/handlers.pykernelspec_model   s.   r    c                 C   s"   t | tod| v od| v od| v S )z[Returns True if spec_dict is already in proper form.  This will occur when using a gateway.r	   r
   r   )
isinstancedict)r   r   r   r   is_kernelspec_model2   s   "r#   c                   @       e Zd Zejejdd ZdS )MainKernelSpecHandlerc           	   	   c   s    | j }| j}i }|j|d< i  |d< }t| V }| D ]/\}}zt|r+|}nt| ||d |d }W n tyI   | j	j
d|dd Y qw |||< q| dd	 | t| d S )
Ndefaultr   r
   r   z Failed to load kernel spec: '%s'T)exc_infoContent-Typeapplication/json)kernel_spec_managerkernel_managerdefault_kernel_namer   get_all_specsitemsr#   r    	Exceptionlogerror
set_headerfinishjsondumps)	selfksmkmmodelspecskspecskernel_namekernel_infor   r   r   r   get9   s(   

zMainKernelSpecHandler.getN__name__
__module____qualname__r   authenticatedr   	coroutiner>   r   r   r   r   r%   7       r%   c                   @   r$   )KernelSpecHandlerc              
   c   s    | j }t|}z
t||V }W n ty) } ztdd| d|d }~ww t|r1|}n
t| ||	 |j
}| dd | t| d S )Ni  zKernel spec z
 not foundr(   r)   )r*   r   r   get_kernel_specKeyErrorr   	HTTPErrorr#   r    to_dictr   r2   r3   r4   r5   )r6   r<   r7   r
   er9   r   r   r   r>   R   s   zKernelSpecHandler.getNr?   r   r   r   r   rF   P   rE   rF   z(?P<kernel_name>[\w\.\-%]+)z/api/kernelspecsz/api/kernelspecs/)__doc__r   r4   r   r   joinr   tornador   r   base.handlersr   utilsr   r   r   r    r#   r%   rF   kernel_name_regexdefault_handlersr   r   r   r   <module>   s     