From 1a3509074e9e729bb81cf86fbb2d54467dbc4e78 Mon Sep 17 00:00:00 2001 From: M Bussonnier Date: Mon, 17 Feb 2025 20:29:57 +0100 Subject: [PATCH 1/4] Test changing base method to async after #1295 This is not meant to be released in 7.0 finale but iss used as a test that: - 1. Our test suite is working is eferything is async - 2. I'like to think of making a canary release (alpha, or beta) with something similar to get feedback from what we break upstream. --- ipykernel/kernelbase.py | 12 ++++++------ pyproject.toml | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/ipykernel/kernelbase.py b/ipykernel/kernelbase.py index 20dcd7f8..5290fd1b 100644 --- a/ipykernel/kernelbase.py +++ b/ipykernel/kernelbase.py @@ -794,7 +794,7 @@ async def execute_request(self, socket, ident, parent): self._aborted_time = time.monotonic() self.log.info("Aborting queue") - def do_execute( + async def do_execute( self, code, silent, @@ -829,7 +829,7 @@ async def complete_request(self, socket, ident, parent): matches = json_clean(matches) self.session.send(socket, "complete_reply", matches, parent, ident) - def do_complete(self, code, cursor_pos): + async def do_complete(self, code, cursor_pos): """Override in subclasses to find completions.""" return { "matches": [], @@ -865,7 +865,7 @@ async def inspect_request(self, socket, ident, parent): msg = self.session.send(socket, "inspect_reply", reply_content, parent, ident) self.log.debug("%s", msg) - def do_inspect(self, code, cursor_pos, detail_level=0, omit_sections=()): + async def do_inspect(self, code, cursor_pos, detail_level=0, omit_sections=()): """Override in subclasses to allow introspection.""" return {"status": "ok", "data": {}, "metadata": {}, "found": False} @@ -889,7 +889,7 @@ async def history_request(self, socket, ident, parent): msg = self.session.send(socket, "history_reply", reply_content, parent, ident) self.log.debug("%s", msg) - def do_history( + async def do_history( self, hist_access_type, output, @@ -1020,7 +1020,7 @@ async def shutdown_request(self, socket, ident, parent): self.stop() - def do_shutdown(self, restart): + async def do_shutdown(self, restart): """Override in subclasses to do things when the frontend shuts down the kernel. """ @@ -1046,7 +1046,7 @@ async def is_complete_request(self, socket, ident, parent): reply_msg = self.session.send(socket, "is_complete_reply", reply_content, parent, ident) self.log.debug("%s", reply_msg) - def do_is_complete(self, code): + async def do_is_complete(self, code): """Override in subclasses to find completions.""" return {"status": "unknown"} diff --git a/pyproject.toml b/pyproject.toml index ef49f0e4..a283e0de 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -192,7 +192,7 @@ filterwarnings= [ "ignore:unclosed database in Date: Tue, 18 Feb 2025 14:55:31 +0100 Subject: [PATCH 2/4] update more requests --- ipykernel/ipkernel.py | 10 +++++----- tests/conftest.py | 1 + 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/ipykernel/ipkernel.py b/ipykernel/ipkernel.py index 5c450169..35945fbd 100644 --- a/ipykernel/ipkernel.py +++ b/ipykernel/ipkernel.py @@ -497,7 +497,7 @@ async def run(execution: Execution) -> None: return reply_content - def do_complete(self, code, cursor_pos): + async def do_complete(self, code, cursor_pos): """Handle code completion.""" if _use_experimental_60_completion and self.use_experimental_completions: return self._experimental_do_complete(code, cursor_pos) @@ -567,7 +567,7 @@ def _experimental_do_complete(self, code, cursor_pos): "status": "ok", } - def do_inspect(self, code, cursor_pos, detail_level=0, omit_sections=()): + async def do_inspect(self, code, cursor_pos, detail_level=0, omit_sections=()): """Handle code inspection.""" name = token_at_cursor(code, cursor_pos) @@ -595,7 +595,7 @@ def do_inspect(self, code, cursor_pos, detail_level=0, omit_sections=()): return reply_content - def do_history( + async def do_history( self, hist_access_type, output, @@ -631,13 +631,13 @@ def do_history( "history": list(hist), } - def do_shutdown(self, restart): + async def do_shutdown(self, restart): """Handle kernel shutdown.""" if self.shell: self.shell.exit_now = True return dict(status="ok", restart=restart) - def do_is_complete(self, code): + async def do_is_complete(self, code): """Handle an is_complete request.""" transformer_manager = getattr(self.shell, "input_transformer_manager", None) if transformer_manager is None: diff --git a/tests/conftest.py b/tests/conftest.py index 2c266555..44aee6ac 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -116,6 +116,7 @@ def destroy(self): @no_type_check async def test_shell_message(self, *args, **kwargs): msg_list = self._prep_msg(*args, **kwargs) + print(msg_list) await self.process_shell_message(msg_list) receive_stream: MemoryObjectReceiveStream[Any] = self.session._streams[self.shell_socket][ "receive" From 63d68244390251862b44014ed6a21b2b1ae32977 Mon Sep 17 00:00:00 2001 From: M Bussonnier Date: Wed, 19 Feb 2025 10:13:14 +0100 Subject: [PATCH 3/4] one more async method --- pyproject.toml | 1 + tests/conftest.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index a283e0de..9b2f3843 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -194,6 +194,7 @@ filterwarnings= [ # ignore deprecated non async during tests: "error:For consistency across implementations, it is recommended that:PendingDeprecationWarning", + ] [tool.coverage.report] diff --git a/tests/conftest.py b/tests/conftest.py index 44aee6ac..891b9ae6 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -169,7 +169,7 @@ def __init__(self, *args, **kwargs): self.shell = MagicMock() super().__init__(*args, **kwargs) - def do_execute( + async def do_execute( self, code, silent, store_history=True, user_expressions=None, allow_stdin=False ): if not silent: From c5ccc25ee70e46cae292cd4a070b8348263dec41 Mon Sep 17 00:00:00 2001 From: M Bussonnier Date: Wed, 19 Feb 2025 10:14:50 +0100 Subject: [PATCH 4/4] Update tests/conftest.py --- tests/conftest.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/conftest.py b/tests/conftest.py index 891b9ae6..22714c6e 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -116,7 +116,6 @@ def destroy(self): @no_type_check async def test_shell_message(self, *args, **kwargs): msg_list = self._prep_msg(*args, **kwargs) - print(msg_list) await self.process_shell_message(msg_list) receive_stream: MemoryObjectReceiveStream[Any] = self.session._streams[self.shell_socket][ "receive"