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 ddl	m
Z
 ddlmZ ddlmZ ddlmZmZ d	Zd
d Zdd ZG dd de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)ensure_async)web)
authorized   )
APIHandler)url_path_joinurl_unescapekernelspecsc           
      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.cssr	   r   zlogo-*)	ospathexistspjoinr   base_urlglobbasenamesplitext)
handlerr
   	spec_dictresource_dirdresource	logo_filefnameno_ext_ r   g/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/jupyter_server/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_model*   s   
r#   c                   @   s   e Zd ZdZeZdS )KernelSpecsAPIHandlerzA kernel spec API handler.N)__name__
__module____qualname____doc__AUTH_RESOURCEauth_resourcer   r   r   r   r$   4   s    r$   c                   @   "   e Zd ZdZejedd ZdS )MainKernelSpecHandlerzThe root kernel spec handler.c           	   	      s   | j }| j}i }|j|d< i  |d< }t| I dH }| D ]/\}}zt|r-|}nt| ||d |d }W n tyK   | j	j
d|dd Y q!w |||< q!| d	d
 | t| dS )zGet the list of kernel specs.defaultr	   Nr   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   get=   s2   

zMainKernelSpecHandler.getNr%   r&   r'   r(   r   authenticatedr   rE   r   r   r   r   r,   :   
    r,   c                   @   r+   )KernelSpecHandlerz(A handler for an individual kernel spec.c              
      s   | j }t|}zt||I dH }W n ty) } z	tdd| |d}~ww t|r1|}n
t| ||	 |j
}| dd | t| dS )zGet a kernel spec model.Ni  zKernel spec %s not foundr/   r0   )r1   r   r   get_kernel_specKeyErrorr   	HTTPErrorr#   r    to_dictr   r9   r:   r;   r<   )r=   rC   r>   r   er@   r   r   r   rE   ]   s   zKernelSpecHandler.getNrF   r   r   r   r   rI   Z   rH   rI   z(?P<kernel_name>[\w\.\-%]+)z/api/kernelspecsz/api/kernelspecs/%s)r(   r   r;   r   r   joinr   jupyter_core.utilsr   tornador   jupyter_server.authr   base.handlersr   utilsr   r   r)   r    r#   r$   r,   rI   kernel_name_regexdefault_handlersr   r   r   r   <module>   s(    
 
