diff --git a/.github/workflows/python-tests.yml b/.github/workflows/python-tests.yml index 1b40cd6d87..314415ced6 100644 --- a/.github/workflows/python-tests.yml +++ b/.github/workflows/python-tests.yml @@ -111,7 +111,7 @@ jobs: pytest -vv -W default || pytest -vv -W default --lf check_links: - name: Make SDist + name: Check Links runs-on: ubuntu-latest timeout-minutes: 10 steps: diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index ac19dec24f..daf9e02cc9 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -22,7 +22,7 @@ repos: args: ["--line-length", "100"] - repo: https://github.com/PyCQA/isort - rev: 5.10.1 + rev: 5.12.0 hooks: - id: isort files: \.py$ diff --git a/jupyter_server/extension/utils.py b/jupyter_server/extension/utils.py index a8c93a0580..e8f5339d62 100644 --- a/jupyter_server/extension/utils.py +++ b/jupyter_server/extension/utils.py @@ -26,19 +26,24 @@ def get_loader(obj, logger=None): underscore prefix. """ try: - func = getattr(obj, "_load_jupyter_server_extension") # noqa B009 + return getattr(obj, "_load_jupyter_server_extension") # noqa B009 except AttributeError: - func = getattr(obj, "load_jupyter_server_extension", None) - warnings.warn( - "A `_load_jupyter_server_extension` function was not " - "found in {name!s}. Instead, a `load_jupyter_server_extension` " - "function was found and will be used for now. This function " - "name will be deprecated in future releases " - "of Jupyter Server.".format(name=obj), - DeprecationWarning, - ) - except Exception: - raise ExtensionLoadingError("_load_jupyter_server_extension function was not found.") + pass + + try: + func = getattr(obj, "load_jupyter_server_extension") # noqa B009 + except AttributeError: + msg = "_load_jupyter_server_extension function was not found." + raise ExtensionLoadingError(msg) from None + + warnings.warn( + "A `_load_jupyter_server_extension` function was not " + "found in {name!s}. Instead, a `load_jupyter_server_extension` " + "function was found and will be used for now. This function " + "name will be deprecated in future releases " + "of Jupyter Server.".format(name=obj), + DeprecationWarning, + ) return func diff --git a/tests/extension/mockextensions/mockext_deprecated.py b/tests/extension/mockextensions/mockext_deprecated.py new file mode 100644 index 0000000000..527ac3a8bb --- /dev/null +++ b/tests/extension/mockextensions/mockext_deprecated.py @@ -0,0 +1,12 @@ +"""A mock extension named `mockext_py` for testing purposes. +""" +# Function that makes these extensions discoverable +# by the test functions. + + +def _jupyter_server_extension_paths(): + return [{"module": "tests.extension.mockextensions.mockext_deprecated"}] + + +def load_jupyter_server_extension(serverapp): + pass diff --git a/tests/extension/test_utils.py b/tests/extension/test_utils.py index 49a36b20ee..5bc1a26873 100644 --- a/tests/extension/test_utils.py +++ b/tests/extension/test_utils.py @@ -1,6 +1,11 @@ import pytest -from jupyter_server.extension.utils import validate_extension +from jupyter_server.extension.utils import ( + ExtensionLoadingError, + get_loader, + validate_extension, +) +from tests.extension.mockextensions import mockext_deprecated, mockext_sys # Use ServerApps environment because it monkeypatches # jupyter_core.paths and provides a config directory @@ -17,3 +22,11 @@ def test_validate_extension(): assert validate_extension("tests.extension.mockextensions.mockext_user") # enabled at Python assert validate_extension("tests.extension.mockextensions.mockext_py") + + +def test_get_loader(): + assert get_loader(mockext_sys) == mockext_sys._load_jupyter_server_extension + with pytest.deprecated_call(): + assert get_loader(mockext_deprecated) == mockext_deprecated.load_jupyter_server_extension + with pytest.raises(ExtensionLoadingError): + get_loader(object())