5
5
HasTraits ,
6
6
Dict ,
7
7
Unicode ,
8
+ Bool ,
8
9
validate
9
10
)
10
11
@@ -107,8 +108,8 @@ def _get_loader(self):
107
108
def validate (self ):
108
109
"""Check that both a linker and loader exists."""
109
110
try :
110
- self .get_linker ()
111
- self .get_loader ()
111
+ self ._get_linker ()
112
+ self ._get_loader ()
112
113
except Exception :
113
114
return False
114
115
@@ -118,7 +119,7 @@ def link(self, serverapp):
118
119
This looks for a `_link_jupyter_server_extension` function
119
120
in the extension's module or ExtensionApp class.
120
121
"""
121
- linker = self .get_linker ()
122
+ linker = self ._get_linker ()
122
123
return linker (serverapp )
123
124
124
125
def load (self , serverapp ):
@@ -127,7 +128,7 @@ def load(self, serverapp):
127
128
This looks for a `_load_jupyter_server_extension` function
128
129
in the extension's module or ExtensionApp class.
129
130
"""
130
- loader = self .get_loader ()
131
+ loader = self ._get_loader ()
131
132
return loader (serverapp )
132
133
133
134
@@ -140,6 +141,7 @@ class ExtensionPackage(HasTraits):
140
141
extpkg = ExtensionPackage(name=ext_name)
141
142
"""
142
143
name = Unicode (help = "Name of the an importable Python package." )
144
+ enabled = Bool (False ).tag (config = True )
143
145
144
146
def __init__ (self , * args , ** kwargs ):
145
147
# Store extension points that have been linked.
@@ -187,7 +189,7 @@ def extension_points(self):
187
189
188
190
def validate (self ):
189
191
"""Validate all extension points in this package."""
190
- for extension in self .extensions_points :
192
+ for extension in self .extension_points . values () :
191
193
if not extension .validate ():
192
194
return False
193
195
return True
@@ -224,27 +226,27 @@ def __init__(self, config_manager=None, *args, **kwargs):
224
226
# with extension (package) names mapped to their ExtensionPackage interface
225
227
# (see above). This manager simplifies the interaction between the
226
228
# ServerApp and the extensions being appended.
227
- self ._enabled_extensions = {}
229
+ self ._extensions = {}
228
230
# The `_linked_extensions` attribute tracks when each extension
229
231
# has been successfully linked to a ServerApp. This helps prevent
230
232
# extensions from being re-linked recursively unintentionally if another
231
233
# extension attempts to link extensions again.
232
234
self ._linked_extensions = {}
233
235
self ._config_manager = config_manager
234
236
if self ._config_manager :
235
- self .from_config_manager
237
+ self .from_config_manager ( self . _config_manager )
236
238
237
239
@property
238
- def enabled_extensions (self ):
240
+ def extensions (self ):
239
241
"""Dictionary with extension package names as keys
240
242
and an ExtensionPackage objects as values.
241
243
"""
242
244
# Sort enabled extensions before
243
- return self ._enabled_extensions
245
+ return self ._extensions
244
246
245
247
@property
246
248
def extension_points (self ):
247
- extensions = self .enabled_extensions
249
+ extensions = self .extensions
248
250
return {
249
251
name : point
250
252
for value in extensions .values ()
@@ -260,42 +262,42 @@ def from_config_manager(self, config_manager):
260
262
def from_jpserver_extensions (self , jpserver_extensions ):
261
263
"""Add extensions from 'jpserver_extensions'-like dictionary."""
262
264
for name , enabled in jpserver_extensions .items ():
263
- if enabled :
264
- self .add_extension (name )
265
+ self .add_extension (name , enabled = enabled )
265
266
266
- def add_extension (self , extension_name ):
267
+ def add_extension (self , extension_name , enabled = False ):
267
268
try :
268
- extpkg = ExtensionPackage (name = extension_name )
269
- self ._enabled_extensions [extension_name ] = extpkg
270
- # Raise a warning if the extension cannot be loaded.
269
+ extpkg = ExtensionPackage (name = extension_name , enabled = enabled )
270
+ self ._extensions [extension_name ] = extpkg
271
+ # Raise a warning if the extension cannot be loaded.
271
272
except Exception as e :
272
273
self .log .warning (e )
273
274
274
275
def link_extension (self , name , serverapp ):
275
276
linked = self ._linked_extensions .get (name , False )
276
- extension = self .enabled_extensions [name ]
277
- if not linked :
277
+ extension = self .extensions [name ]
278
+ if not linked and extension . enabled :
278
279
try :
279
280
extension .link_all_points (serverapp )
280
281
self .log .info ("{name} | extension was successfully linked." .format (name = name ))
281
282
except Exception as e :
282
283
self .log .warning (e )
283
284
284
285
def load_extension (self , name , serverapp ):
285
- extension = self .enabled_extensions .get (name )
286
- try :
287
- extension .load_all_points (serverapp )
288
- self .log .info ("{name} | extension was successfully loaded." .format (name = name ))
289
- except Exception as e :
290
- self .log .warning (e )
286
+ extension = self .extensions .get (name )
287
+ if extension .enabled :
288
+ try :
289
+ extension .load_all_points (serverapp )
290
+ self .log .info ("{name} | extension was successfully loaded." .format (name = name ))
291
+ except Exception as e :
292
+ self .log .warning (e )
291
293
292
294
def link_all_extensions (self , serverapp ):
293
295
"""Link all enabled extensions
294
296
to an instance of ServerApp
295
297
"""
296
298
# Sort the extension names to enforce deterministic linking
297
299
# order.
298
- for name in sorted (self .enabled_extensions .keys ()):
300
+ for name in sorted (self .extensions .keys ()):
299
301
self .link_extension (name , serverapp )
300
302
301
303
def load_all_extensions (self , serverapp ):
@@ -304,6 +306,6 @@ def load_all_extensions(self, serverapp):
304
306
"""
305
307
# Sort the extension names to enforce deterministic loading
306
308
# order.
307
- for name in sorted (self .enabled_extensions .keys ()):
309
+ for name in sorted (self .extensions .keys ()):
308
310
self .load_extension (name , serverapp )
309
311
0 commit comments