o
    ^iP                     @  s   d Z ddlmZ ddlZddlZddlZddlm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
    )annotationsN)Any)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/home/ubuntu/hpml_nyu/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&   7   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   rG   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 foundr1   r2   )r3   r
   r   get_kernel_specKeyErrorr   	HTTPErrorr%   r"   to_dictr   r;   r<   r=   r>   )r?   rE   r@   r   erB   r    r    r!   rG   `   s   zKernelSpecHandler.getNrH   r    r    r    r!   rK   ]   rJ   rK   z(?P<kernel_name>[\w\.\-%]+)z/api/kernelspecsz/api/kernelspecs/%s)r*   
__future__r   r   r=   r   typingr   r   joinr   jupyter_core.utilsr   tornador   jupyter_server.auth.decoratorr   base.handlersr   utilsr	   r
   r+   r"   r%   r&   r.   rK   kernel_name_regexdefault_handlersr    r    r    r!   <module>   s,    
 
