Skip to content

Commit b5cb375

Browse files
ianthomas23pre-commit-ci[bot]minrk
authored
Support ipykernel's use of anyio in test_signal_kernel_subprocesses (#1034)
* Support ipykernel's use of anyio in test_signal_kernel_subprocesses * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Min RK <[email protected]>
1 parent 5d48881 commit b5cb375

File tree

1 file changed

+24
-5
lines changed

1 file changed

+24
-5
lines changed

tests/signalkernel.py

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ async def shutdown_request(self, stream, ident, parent):
3030
if os.environ.get("NO_SHUTDOWN_REPLY") != "1":
3131
await super().shutdown_request(stream, ident, parent)
3232

33-
def do_execute(
33+
async def do_execute(
3434
self, code, silent, store_history=True, user_expressions=None, allow_stdin=False
3535
):
3636
code = code.strip()
@@ -47,12 +47,31 @@ def do_execute(
4747
elif code == "env":
4848
reply["user_expressions"]["env"] = os.getenv("TEST_VARS", "")
4949
elif code == "sleep":
50-
try:
51-
time.sleep(10)
52-
except KeyboardInterrupt:
53-
reply["user_expressions"]["interrupted"] = True
50+
import ipykernel
51+
52+
if ipykernel.version_info < (7, 0):
53+
# ipykernel before anyio.
54+
try:
55+
time.sleep(10)
56+
except KeyboardInterrupt:
57+
reply["user_expressions"]["interrupted"] = True
58+
else:
59+
reply["user_expressions"]["interrupted"] = False
5460
else:
61+
# ipykernel after anyio.
62+
from anyio import create_task_group, open_signal_receiver, sleep
63+
64+
async def signal_handler(cancel_scope, reply):
65+
with open_signal_receiver(signal.SIGINT) as signals:
66+
async for _ in signals:
67+
reply["user_expressions"]["interrupted"] = True
68+
cancel_scope.cancel()
69+
return
70+
5571
reply["user_expressions"]["interrupted"] = False
72+
async with create_task_group() as tg:
73+
tg.start_soon(signal_handler, tg.cancel_scope, reply)
74+
tg.start_soon(sleep, 10)
5675
else:
5776
reply["status"] = "error"
5877
reply["ename"] = "Error"

0 commit comments

Comments
 (0)