16
16
from ...base .handlers import APIHandler
17
17
from ...utils import url_path_join , url_unescape
18
18
19
- def kernelspec_model (handler , name ):
19
+ def kernelspec_model (handler , name , spec_dict , resource_dir ):
20
20
"""Load a KernelSpec by name and return the REST API model"""
21
- ksm = handler .kernel_spec_manager
22
- spec = ksm .get_kernel_spec (name )
23
- d = {'name' : name }
24
- d ['spec' ] = spec .to_dict ()
25
- d ['resources' ] = resources = {}
26
- resource_dir = spec .resource_dir
21
+ d = {
22
+ 'name' : name ,
23
+ 'spec' : spec_dict ,
24
+ 'resources' : {}
25
+ }
26
+
27
+ # Add resource files if they exist
28
+ resource_dir = resource_dir
27
29
for resource in ['kernel.js' , 'kernel.css' ]:
28
30
if os .path .exists (pjoin (resource_dir , resource )):
29
- resources [resource ] = url_path_join (
31
+ d [ ' resources' ] [resource ] = url_path_join (
30
32
handler .base_url ,
31
33
'kernelspecs' ,
32
34
name ,
@@ -35,7 +37,7 @@ def kernelspec_model(handler, name):
35
37
for logo_file in glob .glob (pjoin (resource_dir , 'logo-*' )):
36
38
fname = os .path .basename (logo_file )
37
39
no_ext , _ = os .path .splitext (fname )
38
- resources [no_ext ] = url_path_join (
40
+ d [ ' resources' ] [no_ext ] = url_path_join (
39
41
handler .base_url ,
40
42
'kernelspecs' ,
41
43
name ,
@@ -52,9 +54,10 @@ def get(self):
52
54
model = {}
53
55
model ['default' ] = km .default_kernel_name
54
56
model ['kernelspecs' ] = specs = {}
55
- for kernel_name in ksm .find_kernel_specs ():
57
+ for kernel_name , kernel_info in ksm .get_all_specs (). items ():
56
58
try :
57
- d = kernelspec_model (self , kernel_name )
59
+ d = kernelspec_model (self , kernel_name , kernel_info ['spec' ],
60
+ kernel_info ['resource_dir' ])
58
61
except Exception :
59
62
self .log .error ("Failed to load kernel spec: '%s'" , kernel_name , exc_info = True )
60
63
continue
@@ -67,10 +70,13 @@ class KernelSpecHandler(APIHandler):
67
70
68
71
@web .authenticated
69
72
def get (self , kernel_name ):
73
+ ksm = self .kernel_spec_manager
74
+ kernel_name = url_unescape (kernel_name )
70
75
try :
71
- model = kernelspec_model ( self , url_unescape ( kernel_name ) )
76
+ spec = ksm . get_kernel_spec ( kernel_name )
72
77
except KeyError :
73
78
raise web .HTTPError (404 , u'Kernel spec %s not found' % kernel_name )
79
+ model = kernelspec_model (self , kernel_name , spec .to_dict (), spec .resource_dir )
74
80
self .set_header ("Content-Type" , 'application/json' )
75
81
self .finish (json .dumps (model ))
76
82
0 commit comments