Skip to content

Commit 0028483

Browse files
vidartfpre-commit-ci[bot]blink1073
authored
Check for serverapp for reraise flag (#887)
* Check for serverapp for reraise flag The supporting serverextension apps (enable/disable/list) should probably always complete even if an exception raises an error, so in those cases, default to just warning about exceptions, but still complete. * Add regtest for ExtensionManager wo/serverapp It should not raise exceptions if there is no serverapp. * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Fix lint Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Steven Silvester <[email protected]>
1 parent 6baed5e commit 0028483

File tree

2 files changed

+17
-13
lines changed

2 files changed

+17
-13
lines changed

jupyter_server/extension/manager.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -322,7 +322,7 @@ def add_extension(self, extension_name, enabled=False):
322322
return True
323323
# Raise a warning if the extension cannot be loaded.
324324
except Exception as e:
325-
if self.serverapp.reraise_server_extension_failures:
325+
if self.serverapp and self.serverapp.reraise_server_extension_failures:
326326
raise
327327
self.log.warning(
328328
"%s | error adding extension (enabled: %s): %s",
@@ -343,7 +343,7 @@ def link_extension(self, name):
343343
self.linked_extensions[name] = True
344344
self.log.info("%s | extension was successfully linked.", name)
345345
except Exception as e:
346-
if self.serverapp.reraise_server_extension_failures:
346+
if self.serverapp and self.serverapp.reraise_server_extension_failures:
347347
raise
348348
self.log.warning("%s | error linking extension: %s", name, e, exc_info=True)
349349

@@ -354,7 +354,7 @@ def load_extension(self, name):
354354
try:
355355
extension.load_all_points(self.serverapp)
356356
except Exception as e:
357-
if self.serverapp.reraise_server_extension_failures:
357+
if self.serverapp and self.serverapp.reraise_server_extension_failures:
358358
raise
359359
self.log.warning("%s | extension failed loading with message: %s", name, e)
360360
self.log.exception("%s | stack trace", name)

tests/extension/test_manager.py

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import os
22
import unittest.mock as mock
3+
from contextlib import nullcontext
34

45
import pytest
56
from jupyter_core.paths import jupyter_config_path
@@ -96,39 +97,42 @@ def test_extension_manager_linked_extensions(jp_serverapp):
9697
assert name in manager.linked_extensions
9798

9899

99-
def test_extension_manager_fail_add(jp_serverapp):
100+
@pytest.mark.parametrize("has_app", [True, False])
101+
def test_extension_manager_fail_add(jp_serverapp, has_app):
100102
name = "tests.extension.notanextension"
101-
manager = ExtensionManager(serverapp=jp_serverapp)
103+
manager = ExtensionManager(serverapp=jp_serverapp if has_app else None)
102104
manager.add_extension(name, enabled=True) # should only warn
103105
jp_serverapp.reraise_server_extension_failures = True
104-
with pytest.raises(ExtensionModuleNotFound):
105-
manager.add_extension(name, enabled=True)
106+
with pytest.raises(ExtensionModuleNotFound) if has_app else nullcontext():
107+
assert manager.add_extension(name, enabled=True) is False
106108

107109

108-
def test_extension_manager_fail_link(jp_serverapp):
110+
@pytest.mark.parametrize("has_app", [True, False])
111+
def test_extension_manager_fail_link(jp_serverapp, has_app):
109112
name = "tests.extension.mockextensions.app"
110113
with mock.patch(
111114
"tests.extension.mockextensions.app.MockExtensionApp.parse_command_line",
112115
side_effect=RuntimeError,
113116
):
114-
manager = ExtensionManager(serverapp=jp_serverapp)
117+
manager = ExtensionManager(serverapp=jp_serverapp if has_app else None)
115118
manager.add_extension(name, enabled=True)
116119
manager.link_extension(name) # should only warn
117120
jp_serverapp.reraise_server_extension_failures = True
118-
with pytest.raises(RuntimeError):
121+
with pytest.raises(RuntimeError) if has_app else nullcontext():
119122
manager.link_extension(name)
120123

121124

122-
def test_extension_manager_fail_load(jp_serverapp):
125+
@pytest.mark.parametrize("has_app", [True, False])
126+
def test_extension_manager_fail_load(jp_serverapp, has_app):
123127
name = "tests.extension.mockextensions.app"
124128
with mock.patch(
125129
"tests.extension.mockextensions.app.MockExtensionApp.initialize_handlers",
126130
side_effect=RuntimeError,
127131
):
128-
manager = ExtensionManager(serverapp=jp_serverapp)
132+
manager = ExtensionManager(serverapp=jp_serverapp if has_app else None)
129133
manager.add_extension(name, enabled=True)
130134
manager.link_extension(name)
131135
manager.load_extension(name) # should only warn
132136
jp_serverapp.reraise_server_extension_failures = True
133-
with pytest.raises(RuntimeError):
137+
with pytest.raises(RuntimeError) if has_app else nullcontext():
134138
manager.load_extension(name)

0 commit comments

Comments
 (0)