From fc7add554172607a697e664ad4038701651288db Mon Sep 17 00:00:00 2001 From: Darshan808 Date: Sun, 6 Apr 2025 13:07:20 +0545 Subject: [PATCH 1/2] enhance-verification-for-toggling-extensions --- jupyter_server/extension/serverextension.py | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/jupyter_server/extension/serverextension.py b/jupyter_server/extension/serverextension.py index 5978933acb..7b6513b2b8 100644 --- a/jupyter_server/extension/serverextension.py +++ b/jupyter_server/extension/serverextension.py @@ -259,9 +259,23 @@ def toggle_server_extension(self, import_name: str) -> None: self.log.info(f"- Writing config: {config_dir}") # Validate the server extension. self.log.info(f" - Validating {import_name}...") + config = extension_manager.config_manager + enabled = False + if config: + jpserver_extensions = config.get_jpserver_extensions() + if import_name not in jpserver_extensions: + msg = ( + f"The module '{import_name}' could not be found. Are you " + "sure the extension is installed?" + ) + raise ValueError(msg) + enabled = jpserver_extensions[import_name] + # Interface with the Extension Package and validate. - extpkg = ExtensionPackage(name=import_name) - extpkg.validate() + extpkg = ExtensionPackage(name=import_name, enabled=enabled) + if not extpkg.validate(): + msg = "validation failed" + raise ValueError(msg) version = extpkg.version self.log.info(f" {import_name} {version} {GREEN_OK}") From aa796ab378de7a50523d7026f4a2affc7a1f8437 Mon Sep 17 00:00:00 2001 From: Zach Sailer Date: Mon, 14 Apr 2025 16:44:21 -0700 Subject: [PATCH 2/2] add test to ensure toggling a missing extension raises an error --- tests/extension/test_serverextension.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tests/extension/test_serverextension.py b/tests/extension/test_serverextension.py index 98e2a8dec3..7414e68151 100644 --- a/tests/extension/test_serverextension.py +++ b/tests/extension/test_serverextension.py @@ -134,3 +134,11 @@ def test_server_extension_apps(jp_env_config_path, jp_extension_environ): def test_server_extension_app(): app = ServerExtensionApp() app.launch_instance(["list"]) + + +def test_toggle_missing_server_extension(jp_env_config_path, capsys): + app = ToggleServerExtensionApp() + app.extra_args = ["missingextension"] + app.start() + captured = capsys.readouterr() + assert "Validation failed: The module 'missingextension' could not be found." in captured.err