Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Handle importstring pre/post save hooks #754

Merged
merged 1 commit into from Mar 25, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
4 changes: 2 additions & 2 deletions jupyter_server/services/contents/manager.py
Expand Up @@ -127,7 +127,7 @@ def _validate_pre_save_hook(self, proposal):
value = import_item(self.pre_save_hook)
if not callable(value):
raise TraitError("pre_save_hook must be callable")
if self.pre_save_hook is not None:
if callable(self.pre_save_hook):
warnings.warn(
f"Overriding existing pre_save_hook ({self.pre_save_hook.__name__}) with a new one ({value.__name__}).",
stacklevel=2,
Expand Down Expand Up @@ -162,7 +162,7 @@ def _validate_post_save_hook(self, proposal):
value = import_item(value)
if not callable(value):
raise TraitError("post_save_hook must be callable")
if self.post_save_hook is not None:
if callable(self.post_save_hook):
warnings.warn(
f"Overriding existing post_save_hook ({self.post_save_hook.__name__}) with a new one ({value.__name__}).",
stacklevel=2,
Expand Down
24 changes: 24 additions & 0 deletions tests/services/contents/test_config.py
Expand Up @@ -18,6 +18,30 @@ def test_config_did_something(jp_server_config, jp_serverapp):
)


def example_pre_save_hook():
pass


def example_post_save_hook():
pass


@pytest.mark.parametrize(
"jp_server_config",
[
{
"ContentsManager": {
"pre_save_hook": "tests.services.contents.test_config.example_pre_save_hook",
"post_save_hook": "tests.services.contents.test_config.example_post_save_hook",
},
}
],
)
def test_pre_post_save_hook_config(jp_serverapp, jp_server_config):
assert jp_serverapp.contents_manager.pre_save_hook.__name__ == "example_pre_save_hook"
assert jp_serverapp.contents_manager.post_save_hook.__name__ == "example_post_save_hook"


async def test_async_contents_manager(jp_configurable_serverapp):
config = {"ContentsManager": {"checkpoints_class": AsyncCheckpoints}}
argv = [
Expand Down