Skip to content

Commit 1ccf97b

Browse files
committed
list all paths in server extension application
1 parent eca9e43 commit 1ccf97b

File tree

1 file changed

+56
-31
lines changed

1 file changed

+56
-31
lines changed

jupyter_server/extension/serverextension.py

Lines changed: 56 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,30 @@ def _get_config_dir(user=False, sys_prefix=False):
4747
return extdir
4848

4949

50+
def _get_extmanager_for_context(user=False, sys_prefix=False):
51+
"""Get an extension manager pointing at the current context
52+
53+
Returns the path to the current context and an ExtensionManager object.
54+
55+
Parameters
56+
----------
57+
58+
user : bool [default: False]
59+
Get the user's .jupyter config directory
60+
sys_prefix : bool [default: False]
61+
Get sys.prefix, i.e. ~/.envs/my-env/etc/jupyter
62+
"""
63+
config_dir = _get_config_dir(user=user, sys_prefix=sys_prefix)
64+
config_manager = ExtensionConfigManager(
65+
read_config_path=[config_dir],
66+
write_config_dir=os.path.join(config_dir, "jupyter_server_config.d"),
67+
)
68+
extension_manager = ExtensionManager(
69+
config_manager=config_manager,
70+
)
71+
return config_dir, extension_manager
72+
73+
5074
class ArgumentConflict(ValueError):
5175
pass
5276

@@ -102,19 +126,6 @@ def _log_format_default(self):
102126
def config_dir(self):
103127
return _get_config_dir(user=self.user, sys_prefix=self.sys_prefix)
104128

105-
def initialize(self, *args, **kwargs):
106-
# Locate Server extension config in Jupyter Server's config.d
107-
self.config_manager = ExtensionConfigManager(
108-
read_config_path=[self.config_dir],
109-
write_config_dir=os.path.join(self.config_dir, "jupyter_server_config.d"),
110-
log=self.log
111-
)
112-
self.extension_manager = ExtensionManager(
113-
config_manager=self.config_manager,
114-
log=self.log
115-
)
116-
super().initialize(*args, **kwargs)
117-
118129

119130
# Constants for pretty print extension listing function.
120131
# Window doesn't support coloring in the commandline
@@ -206,12 +217,17 @@ def toggle_server_extension(self, import_name):
206217
Importable Python module (dotted-notation) exposing the magic-named
207218
`load_jupyter_server_extension` function
208219
"""
220+
# Create an extension manager for this instance.
221+
ext_manager, extension_manager = _get_extmanager_for_context(
222+
user=self.user,
223+
sys_prefix=self.sys_prefix
224+
)
209225
try:
210226
self.log.info("{}: {}".format(self._toggle_pre_message.capitalize(), import_name))
211-
self.log.info("- Writing config: {}".format(self.config_dir))
227+
self.log.info("- Writing config: {}".format(ext_manager))
212228
# Validate the server extension.
213229
self.log.info(" - Validating {}...".format(import_name))
214-
extension = self.extension_manager.extensions[import_name]
230+
extension = extension_manager.extensions[import_name]
215231
extension.validate()
216232
version = extension.version
217233
self.log.info(" {} {} {}".format(import_name, version, GREEN_OK))
@@ -275,22 +291,31 @@ def list_server_extensions(self):
275291
276292
Enabled extensions are validated, potentially generating warnings.
277293
"""
278-
self.log.info("Config dir: {}".format(self.config_dir))
279-
for name, extension in self.extension_manager.extensions.items():
280-
enabled = extension.enabled
281-
# Attempt to get extension metadata
282-
self.log.info(u' {} {}'.format(
283-
name,
284-
GREEN_ENABLED if enabled else RED_DISABLED))
285-
try:
286-
self.log.info(" - Validating {}...".format(name))
287-
extension.validate()
288-
version = extension.version
289-
self.log.info(
290-
" {} {} {}".format(name, version, GREEN_OK)
291-
)
292-
except Exception as err:
293-
self.log.warn(" {} {}".format(RED_X, err))
294+
configurations = (
295+
{"user":True, "sys_prefix": False},
296+
{"user":False, "sys_prefix": True},
297+
{"user":False, "sys_prefix": False}
298+
)
299+
for option in configurations:
300+
config_dir, ext_manager = _get_extmanager_for_context(**option)
301+
self.log.info("Config dir: {}".format(config_dir))
302+
for name, extension in ext_manager.extensions.items():
303+
enabled = extension.enabled
304+
# Attempt to get extension metadata
305+
self.log.info(u' {} {}'.format(
306+
name,
307+
GREEN_ENABLED if enabled else RED_DISABLED))
308+
try:
309+
self.log.info(" - Validating {}...".format(name))
310+
extension.validate()
311+
version = extension.version
312+
self.log.info(
313+
" {} {} {}".format(name, version, GREEN_OK)
314+
)
315+
except Exception as err:
316+
self.log.warn(" {} {}".format(RED_X, err))
317+
# Add a blank line between paths.
318+
self.log.info("")
294319

295320
def start(self):
296321
"""Perform the App's actions as configured"""

0 commit comments

Comments
 (0)