Skip to content

Commit 9177f11

Browse files
authored
Handle importstring pre/post save hooks (#754)
1 parent cd1b1b8 commit 9177f11

File tree

2 files changed

+26
-2
lines changed

2 files changed

+26
-2
lines changed

jupyter_server/services/contents/manager.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ def _validate_pre_save_hook(self, proposal):
127127
value = import_item(self.pre_save_hook)
128128
if not callable(value):
129129
raise TraitError("pre_save_hook must be callable")
130-
if self.pre_save_hook is not None:
130+
if callable(self.pre_save_hook):
131131
warnings.warn(
132132
f"Overriding existing pre_save_hook ({self.pre_save_hook.__name__}) with a new one ({value.__name__}).",
133133
stacklevel=2,
@@ -162,7 +162,7 @@ def _validate_post_save_hook(self, proposal):
162162
value = import_item(value)
163163
if not callable(value):
164164
raise TraitError("post_save_hook must be callable")
165-
if self.post_save_hook is not None:
165+
if callable(self.post_save_hook):
166166
warnings.warn(
167167
f"Overriding existing post_save_hook ({self.post_save_hook.__name__}) with a new one ({value.__name__}).",
168168
stacklevel=2,

tests/services/contents/test_config.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,30 @@ def test_config_did_something(jp_server_config, jp_serverapp):
1818
)
1919

2020

21+
def example_pre_save_hook():
22+
pass
23+
24+
25+
def example_post_save_hook():
26+
pass
27+
28+
29+
@pytest.mark.parametrize(
30+
"jp_server_config",
31+
[
32+
{
33+
"ContentsManager": {
34+
"pre_save_hook": "tests.services.contents.test_config.example_pre_save_hook",
35+
"post_save_hook": "tests.services.contents.test_config.example_post_save_hook",
36+
},
37+
}
38+
],
39+
)
40+
def test_pre_post_save_hook_config(jp_serverapp, jp_server_config):
41+
assert jp_serverapp.contents_manager.pre_save_hook.__name__ == "example_pre_save_hook"
42+
assert jp_serverapp.contents_manager.post_save_hook.__name__ == "example_post_save_hook"
43+
44+
2145
async def test_async_contents_manager(jp_configurable_serverapp):
2246
config = {"ContentsManager": {"checkpoints_class": AsyncCheckpoints}}
2347
argv = [

0 commit comments

Comments
 (0)