
    Ib@                         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 Zd Z G d	 d
e      Z G d de      ZdZdefde 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
    N)webgen   )
APIHandler)maybe_futureurl_path_joinurl_unescapec                    ||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.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_s
             H/usr/lib/python3/dist-packages/notebook/services/kernelspecs/handlers.pykernelspec_modelr!      s     	A 0 77>>%h78'4  	(AkN8$ YYu\8<= 
	  +GG$$U+	!.	"
+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&   2   s/    i&s6Y+>s6YCVs[fjs[ssr"   c                   N    e Zd Zej                  ej                  d               Zy)MainKernelSpecHandlerc              #     K   | j                   }| j                  }i }|j                  |d<   i x|d<   }t        |j	                               }|j                         D ]-  \  }}	 t        |      r|}nt        | ||d   |d         }|||<   / | j                  dd	       | j                  t        j                  |             y # t        $ r! | j                  j                  d|d       Y w xY ww)
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   s	            r    getzMainKernelSpecHandler.get9   s      &&  11i'))mu#C$5$5$788(. 		#$K&{3#A({K<OQ\]kQlmA "#E+		# 	(:;DJJu%&  A;Y]^s*   A"C2%"C>C2'C/,C2.C//C2N__name__
__module____qualname__r   authenticatedr   	coroutinerB    r"   r    r(   r(   7   s&    ]]'  'r"   r(   c                   N    e Zd Zej                  ej                  d               Zy)KernelSpecHandlerc              #     K   | j                   }t        |      }	 t        |j                  |            }t        |      r|}n&t        | ||j                         |j                        }| j                  dd       | j                  t        j                  |             y # t        $ r }t        j                  dd| d      |d }~ww xY ww)Ni  zKernel spec z
 not foundr,   r-   )r.   r	   r   get_kernel_specKeyErrorr   	HTTPErrorr&   r!   to_dictr   r6   r7   r8   r9   )r:   r@   r;   r   er=   s         r    rB   zKernelSpecHandler.getR   s      &&";/	T%c&9&9+&FGGD t$E$T;HYHYZE(:;DJJu%&  	T--|K=
%KLRSS	Ts(   CB" A+C"	C+CCCNrC   rI   r"   r    rK   rK   P   s&    ]]'  'r"   rK   z(?P<kernel_name>[\w\.\-%]+)z/api/kernelspecsz/api/kernelspecs/)__doc__r   r8   r   r   joinr   tornador   r   base.handlersr   utilsr   r   r	   r!   r&   r(   rK   kernel_name_regexdefault_handlersrI   r"   r    <module>rY      s~      	
  ' > >:t
'J '2'
 '* 3  /0+,-/@A r"   