diff --git a/.github/workflows/python-tests.yml b/.github/workflows/python-tests.yml index 4762bdeb95..b506acc659 100644 --- a/.github/workflows/python-tests.yml +++ b/.github/workflows/python-tests.yml @@ -121,6 +121,7 @@ jobs: pip check - name: Run the tests run: | + pip install jupyter_client@https://github.com/blink1073/jupyter_client/archive/refs/heads/fix-pending-kernels-again.zip pytest -vv -W default || pytest -vv -W default --lf make_sdist: diff --git a/jupyter_server/services/kernels/handlers.py b/jupyter_server/services/kernels/handlers.py index 91ce03826e..d932dfbc6c 100644 --- a/jupyter_server/services/kernels/handlers.py +++ b/jupyter_server/services/kernels/handlers.py @@ -397,8 +397,11 @@ async def pre_get(self): kernel = self.kernel_manager.get_kernel(self.kernel_id) if hasattr(kernel, "ready"): + ready = kernel.ready + if not isinstance(ready, asyncio.Future): + ready = asyncio.wrap_future(ready) try: - await kernel.ready + await ready except Exception as e: kernel.execution_state = "dead" kernel.reason = str(e) diff --git a/jupyter_server/services/kernels/kernelmanager.py b/jupyter_server/services/kernels/kernelmanager.py index 3e8c71b847..6cf9dfc4c0 100644 --- a/jupyter_server/services/kernels/kernelmanager.py +++ b/jupyter_server/services/kernels/kernelmanager.py @@ -246,8 +246,11 @@ async def start_kernel(self, kernel_id=None, path=None, **kwargs): async def _finish_kernel_start(self, kernel_id): km = self.get_kernel(kernel_id) if hasattr(km, "ready"): + ready = km.ready + if not isinstance(ready, asyncio.Future): + ready = asyncio.wrap_future(ready) try: - await km.ready + await ready except Exception: self.log.exception("Error waiting for kernel manager ready") return diff --git a/tests/services/kernels/test_api.py b/tests/services/kernels/test_api.py index 8e70ba5f49..2805d63150 100644 --- a/tests/services/kernels/test_api.py +++ b/tests/services/kernels/test_api.py @@ -1,3 +1,4 @@ +import asyncio import json import os import time @@ -22,7 +23,10 @@ async def _(kernel_id): if getattr(km, "use_pending_kernels", False): kernel = km.get_kernel(kernel_id) if getattr(kernel, "ready", None): - await kernel.ready + ready = kernel.ready + if not isinstance(ready, asyncio.Future): + ready = asyncio.wrap_future(ready) + await ready return _ diff --git a/tests/services/sessions/test_api.py b/tests/services/sessions/test_api.py index 1bd4f58dfd..eb2a52efc4 100644 --- a/tests/services/sessions/test_api.py +++ b/tests/services/sessions/test_api.py @@ -1,3 +1,4 @@ +import asyncio import json import os import shutil @@ -163,7 +164,10 @@ async def _(session_id): kernel_id = session["kernel"]["id"] kernel = mkm.get_kernel(kernel_id) if getattr(kernel, "ready", None): - await kernel.ready + ready = kernel.ready + if not isinstance(ready, asyncio.Future): + ready = asyncio.wrap_future(ready) + await ready return _