##// END OF EJS Templates
Add KernelSpecManager.whitelist...
Min RK -
Show More
@@ -345,6 +345,7 b' class NotebookApp(BaseIPythonApplication):'
345 classes = [
345 classes = [
346 KernelManager, ProfileDir, Session, MappingKernelManager,
346 KernelManager, ProfileDir, Session, MappingKernelManager,
347 ContentsManager, FileContentsManager, NotebookNotary,
347 ContentsManager, FileContentsManager, NotebookNotary,
348 KernelSpecManager,
348 ]
349 ]
349 flags = Dict(flags)
350 flags = Dict(flags)
350 aliases = Dict(aliases)
351 aliases = Dict(aliases)
@@ -650,9 +651,6 b' class NotebookApp(BaseIPythonApplication):'
650
651
651 kernel_spec_manager = Instance(KernelSpecManager)
652 kernel_spec_manager = Instance(KernelSpecManager)
652
653
653 def _kernel_spec_manager_default(self):
654 return KernelSpecManager(ipython_dir=self.ipython_dir)
655
656 kernel_spec_manager_class = Type(
654 kernel_spec_manager_class = Type(
657 default_value=KernelSpecManager,
655 default_value=KernelSpecManager,
658 config=True,
656 config=True,
@@ -766,6 +764,7 b' class NotebookApp(BaseIPythonApplication):'
766 default_secure(self.config)
764 default_secure(self.config)
767
765
768 self.kernel_spec_manager = self.kernel_spec_manager_class(
766 self.kernel_spec_manager = self.kernel_spec_manager_class(
767 parent=self,
769 ipython_dir=self.ipython_dir,
768 ipython_dir=self.ipython_dir,
770 )
769 )
771 self.kernel_manager = self.kernel_manager_class(
770 self.kernel_manager = self.kernel_manager_class(
@@ -8,7 +8,8 b' pjoin = os.path.join'
8
8
9 from IPython.utils.path import get_ipython_dir
9 from IPython.utils.path import get_ipython_dir
10 from IPython.utils.py3compat import PY3
10 from IPython.utils.py3compat import PY3
11 from IPython.utils.traitlets import HasTraits, List, Unicode, Dict, Any
11 from IPython.utils.traitlets import HasTraits, List, Unicode, Dict, Any, Set
12 from IPython.config import Configurable
12 from .launcher import make_ipkernel_cmd
13 from .launcher import make_ipkernel_cmd
13
14
14 if os.name == 'nt':
15 if os.name == 'nt':
@@ -81,7 +82,7 b' class NoSuchKernel(KeyError):'
81 def __init__(self, name):
82 def __init__(self, name):
82 self.name = name
83 self.name = name
83
84
84 class KernelSpecManager(HasTraits):
85 class KernelSpecManager(Configurable):
85 ipython_dir = Unicode()
86 ipython_dir = Unicode()
86 def _ipython_dir_default(self):
87 def _ipython_dir_default(self):
87 return get_ipython_dir()
88 return get_ipython_dir()
@@ -94,9 +95,15 b' class KernelSpecManager(HasTraits):'
94 def env_kernel_dir(self):
95 def env_kernel_dir(self):
95 return pjoin(sys.prefix, 'share', 'jupyter', 'kernels')
96 return pjoin(sys.prefix, 'share', 'jupyter', 'kernels')
96
97
98 whitelist = Set(config=True,
99 help="""Whitelist of allowed kernel names.
100
101 By default, all installed kernels are allowed.
102 """
103 )
97 kernel_dirs = List(
104 kernel_dirs = List(
98 help="List of kernel directories to search. Later ones take priority over earlier."
105 help="List of kernel directories to search. Later ones take priority over earlier."
99 )
106 )
100 def _kernel_dirs_default(self):
107 def _kernel_dirs_default(self):
101 dirs = SYSTEM_KERNEL_DIRS[:]
108 dirs = SYSTEM_KERNEL_DIRS[:]
102 if self.env_kernel_dir not in dirs:
109 if self.env_kernel_dir not in dirs:
@@ -128,6 +135,9 b' class KernelSpecManager(HasTraits):'
128 d.update(_list_kernels_in(kernel_dir))
135 d.update(_list_kernels_in(kernel_dir))
129
136
130 d[NATIVE_KERNEL_NAME] = self._native_kernel_resource_dir
137 d[NATIVE_KERNEL_NAME] = self._native_kernel_resource_dir
138 if self.whitelist:
139 # filter if there's a whitelist
140 d = {name:spec for name,spec in d.items() if name in self.whitelist}
131 return d
141 return d
132 # TODO: Caching?
142 # TODO: Caching?
133
143
@@ -136,7 +146,8 b' class KernelSpecManager(HasTraits):'
136
146
137 Raises :exc:`NoSuchKernel` if the given kernel name is not found.
147 Raises :exc:`NoSuchKernel` if the given kernel name is not found.
138 """
148 """
139 if kernel_name in {'python', NATIVE_KERNEL_NAME}:
149 if kernel_name in {'python', NATIVE_KERNEL_NAME} and \
150 (not self.whitelist or kernel_name in self.whitelist):
140 return KernelSpec(resource_dir=self._native_kernel_resource_dir,
151 return KernelSpec(resource_dir=self._native_kernel_resource_dir,
141 **self._native_kernel_dict)
152 **self._native_kernel_dict)
142
153
@@ -22,7 +22,7 b' class ListKernelSpecs(BaseIPythonApplication):'
22 flags = {'debug': base_flags['debug'],}
22 flags = {'debug': base_flags['debug'],}
23
23
24 def _kernel_spec_manager_default(self):
24 def _kernel_spec_manager_default(self):
25 return KernelSpecManager(ipython_dir=self.ipython_dir)
25 return KernelSpecManager(parent=self, ipython_dir=self.ipython_dir)
26
26
27 def start(self):
27 def start(self):
28 print("Available kernels:")
28 print("Available kernels:")
General Comments 0
You need to be logged in to leave comments. Login now