
    XhP                       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 Zd Z G d de      Z G d de      Z G d de      ZdZdefdez  efgZy)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                   ||i d}dD ]J  }t         j                  j                  t        ||            s-t	        | j
                  d||      |d   |<   L t        j                  t        |d            D ]a  }t         j                  j                  |      }t         j                  j                  |      \  }}	t	        | j
                  d||      |d   |<   c |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_s
             `/var/www/html/myenv/lib/python3.12/site-packages/jupyter_server/services/kernelspecs/handlers.pykernelspec_modelr#      s    yr:A 0 77>>%h78'4  -x(AkN8$
 YYu\8<= ]	  +GG$$U+	!.w/?/?PTV[!\+v] H    c                F    t        | t              xr d| v xr
 d| v xr 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   s    r"   is_kernelspec_modelr(   -   s<     	9d# 	%i	%i	% 9$	r$   c                      e Zd ZdZeZy)KernelSpecsAPIHandlerzA kernel spec API handler.N)__name__
__module____qualname____doc__AUTH_RESOURCEauth_resource r$   r"   r*   r*   7   s
    $!Mr$   r*   c                  >    e Zd ZdZej
                  ed               Zy)MainKernelSpecHandlerzThe root kernel spec handler.c                  K   | j                   }| j                  }i }|j                  |d<   i x|d<   }t        |j	                                d{   }|j                         D ]-  \  }}	 t        |      r|}nt        | ||d   |d         }|||<   / | j                  d	d
       | j                  t        j                  |             y7 {# t        $ r! | j                  j                  d|d       Y w xY ww)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   s	            r"   getzMainKernelSpecHandler.get@   s     &&   "11i'))mu#C$5$5$788(. 	#$K&{3#A(##F+#N3	A "#E+	# 	(:;DJJu%&# 9  A;Y]^s6   AC:CC:+"C?C:'C74C:6C77C:Nr+   r,   r-   r.   r   authenticatedr   rM   r1   r$   r"   r3   r3   =   s%    ''  'r$   r3   c                  >    e Zd ZdZej
                  ed               Zy)KernelSpecHandlerz(A handler for an individual kernel spec.c                  K   | j                   }t        |      }	 t        |j                  |             d{   }t        |      r|}n&t        | ||j                         |j                        }| j                  dd       | j                  t        j                  |             y7 o# t        $ r}t        j                  dd|z        |d}~ww xY ww)zGet a kernel spec model.Ni  zKernel spec %s not foundr7   r8   )r9   r   r   get_kernel_specKeyErrorr   	HTTPErrorr(   r#   to_dictr   rA   rB   rC   rD   )rE   rK   rF   r   erH   s         r"   rM   zKernelSpecHandler.get`   s      &&";/	V%c&9&9+&FGGD t$E$T;HYHYZE(:;DJJu%& H 	V--%?+%MNTUU	Vs8   CB* B(B* A+C(B* *	C3CCCNrN   r1   r$   r"   rQ   rQ   ]   s%    2'  'r$   rQ   z(?P<kernel_name>[\w\.\-%]+)z/api/kernelspecsz/api/kernelspecs/%s)r.   
__future__r   r   rC   r   typingr   r   joinr   jupyter_core.utilsr   tornador   jupyter_server.auth.decoratorr   base.handlersr	   utilsr
   r   r/   r#   r(   r*   r3   rQ   kernel_name_regexdefault_handlersr1   r$   r"   <module>rb      s    #   	 
 +  4 ' 0""J "'1 '@'- '. 3  /0//1BC r$   