diff --git a/jupyter_server/extension/serverextension.py b/jupyter_server/extension/serverextension.py index 5978933ac..7b6513b2b 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}") diff --git a/tests/extension/test_serverextension.py b/tests/extension/test_serverextension.py index 98e2a8dec..7414e6815 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