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( |
|
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