Skip to content

Commit 89b35f4

Browse files
Fix get_loader returning None when load_jupyter_server_extension is not found (#1193)Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
* Fix get_loader returning None when load_jupyter_server_extension is not found * Un-nest try/except in get_loader to clarify logic get_loader was never raising ExtensionLoadingError because it would fallback to check if load_jupyter_server_extension is present and if it was not, it would raise an AttributeError. * Fix tests for extension.utils.get_loader * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Add mockext_deprecated.py * Remove import warnings --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
1 parent 849c7b6 commit 89b35f4

File tree

3 files changed

+39
-18
lines changed

3 files changed

+39
-18
lines changed

jupyter_server/extension/utils.py

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -36,20 +36,24 @@ def get_loader(obj, logger=None):
3636
underscore prefix.
3737
"""
3838
try:
39-
func = getattr(obj, "_load_jupyter_server_extension") # noqa B009
39+
return getattr(obj, "_load_jupyter_server_extension") # noqa B009
40+
except AttributeError:
41+
pass
42+
43+
try:
44+
func = getattr(obj, "load_jupyter_server_extension") # noqa B009
4045
except AttributeError:
41-
func = getattr(obj, "load_jupyter_server_extension", None)
42-
warnings.warn(
43-
"A `_load_jupyter_server_extension` function was not "
44-
"found in {name!s}. Instead, a `load_jupyter_server_extension` "
45-
"function was found and will be used for now. This function "
46-
"name will be deprecated in future releases "
47-
"of Jupyter Server.".format(name=obj),
48-
DeprecationWarning,
49-
)
50-
except Exception:
5146
msg = "_load_jupyter_server_extension function was not found."
5247
raise ExtensionLoadingError(msg) from None
48+
49+
warnings.warn(
50+
"A `_load_jupyter_server_extension` function was not "
51+
"found in {name!s}. Instead, a `load_jupyter_server_extension` "
52+
"function was found and will be used for now. This function "
53+
"name will be deprecated in future releases "
54+
"of Jupyter Server.".format(name=obj),
55+
DeprecationWarning,
56+
)
5357
return func
5458

5559

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
"""A mock extension named `mockext_py` for testing purposes.
2+
"""
3+
# Function that makes these extensions discoverable
4+
# by the test functions.
5+
6+
7+
def _jupyter_server_extension_paths():
8+
return [{"module": "tests.extension.mockextensions.mockext_deprecated"}]
9+
10+
11+
def load_jupyter_server_extension(serverapp):
12+
pass

tests/extension/test_utils.py

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
import logging
2-
import warnings
32

43
import pytest
54

6-
from jupyter_server.extension.utils import get_loader, get_metadata, validate_extension
7-
from tests.extension.mockextensions import mockext_sys
5+
from jupyter_server.extension.utils import (
6+
ExtensionLoadingError,
7+
get_loader,
8+
get_metadata,
9+
validate_extension,
10+
)
11+
from tests.extension.mockextensions import mockext_deprecated, mockext_sys
812

913
# Use ServerApps environment because it monkeypatches
1014
# jupyter_core.paths and provides a config directory
@@ -24,10 +28,11 @@ def test_validate_extension():
2428

2529

2630
def test_get_loader():
27-
get_loader(mockext_sys)
28-
with warnings.catch_warnings():
29-
warnings.simplefilter("ignore")
30-
assert get_loader(object()) is None
31+
assert get_loader(mockext_sys) == mockext_sys._load_jupyter_server_extension
32+
with pytest.deprecated_call():
33+
assert get_loader(mockext_deprecated) == mockext_deprecated.load_jupyter_server_extension
34+
with pytest.raises(ExtensionLoadingError):
35+
get_loader(object())
3136

3237

3338
def test_get_metadata():

0 commit comments

Comments
 (0)