
    ^hP                       S r SSKJr  SSKrSSKrSSKrSSKJr  \R                  R                  r
SSKJr  SSKJr  SSKJr  SS	KJr  SS
KJrJr  SrS rS r " S S\5      r " S S\5      r " S S\5      rSrS\4S\-  \4/rg)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                   X0 S.nS HO  n[         R                  R                  [        X55      5      (       d  M2  [	        U R
                  SX5      US   U'   MQ     [        R                  " [        US5      5       H`  n[         R                  R                  U5      n[         R                  R                  U5      u  p[	        U R
                  SX5      US   U'   Mb     U$ )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
             f/home/james-whalen/.local/lib/python3.13/site-packages/jupyter_server/services/kernelspecs/handlers.pykernelspec_modelr#      s    r:A 077>>%788'4  -(AkN8$ 0
 YYu\8<=	  +GG$$U+	!.w/?/?PT!\+v > H    c                j    [        U [        5      =(       a    SU ;   =(       a    SU ;   =(       a    SU ;   $ )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                      \ rS rSrSr\rSrg)KernelSpecsAPIHandler7   zA kernel spec API handler. N)__name__
__module____qualname____firstlineno____doc__AUTH_RESOURCEauth_resource__static_attributes__r,   r$   r"   r*   r*   7   s
    $!Mr$   r*   c                  F    \ rS rSrSr\R                  \S 5       5       rSr	g)MainKernelSpecHandler=   zThe root kernel spec handler.c                  #    U R                   nU R                  n0 nUR                  US'   0 =US'   n[        UR	                  5       5      I Sh  vN nUR                  5        H2  u  pg [        U5      (       a  UnO[        U UUS   US   5      n XU'   M4     U R                  S	S
5        U R                  [        R                  " U5      5        g N! [         a    U R                  R                  SUSS9   M  f = f7f)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"   getMainKernelSpecHandler.get@   s      &&   "11i'))mu#C$5$5$788(.$K&{33#A(##F+#N3	A "#+ )7 	(:;DJJu%&# 9  A;Y]^sC   AD CD *C<D =CAD %C=9D <C==D r,   N
r-   r.   r/   r0   r1   r   authenticatedr   rQ   r4   r,   r$   r"   r6   r6   =   s%    ''  'r$   r6   c                  F    \ rS rSrSr\R                  \S 5       5       rSr	g)KernelSpecHandler]   z(A handler for an individual kernel spec.c                  #    U R                   n[        U5      n [        UR                  U5      5      I Sh  vN n[        U5      (       a  UnO%[        XUR                  5       UR                  5      nU R                  SS5        U R                  [        R                  " U5      5        g Nt! [         a   n[
        R                  " SSU-  5      UeSnAff = f7f)zGet a kernel spec model.Ni  zKernel spec %s not foundr;   r<   )r=   r   r   get_kernel_specKeyErrorr   	HTTPErrorr(   r#   to_dictr   rE   rF   rG   rH   )rI   rO   rJ   r   erL   s         r"   rQ   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/ A0C-B/ /
C9CCCr,   NrS   r,   r$   r"   rV   rV   ]   s%    2'  'r$   rV   z(?P<kernel_name>[\w\.\-%]+)z/api/kernelspecsz/api/kernelspecs/%s)r1   
__future__r   r   rG   r   typingr   r   joinr   jupyter_core.utilsr   tornador   jupyter_server.auth.decoratorr   base.handlersr	   utilsr
   r   r2   r#   r(   r*   r6   rV   kernel_name_regexdefault_handlersr,   r$   r"   <module>ri      s    #   	 
 +  4 ' 0""J "'1 '@'- '. 3  /0//1BC r$   