Skip to content

Commit 5851424

Browse files
committed
Again
1 parent 5c375de commit 5851424

9 files changed

Lines changed: 62 additions & 22 deletions

File tree

.github/workflows/main.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ jobs:
2020
fail-fast: false
2121
matrix:
2222
os: [ubuntu-latest, macos-latest, windows-latest]
23-
python-version: [ '3.9', '3.10', '3.11', '3.12', '3.13' ]
23+
python-version: [ '3.10', '3.11', '3.12', '3.13', '3.14' ]
2424

2525
steps:
2626
- name: Checkout

plugins/akernel_task/fps_akernel_task/main.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,14 @@ def __init__(self, *args, execute_in_thread: bool = False, **kwargs) -> None:
1717

1818
async def prepare(self) -> None:
1919
kernels = await self.get(Kernels)
20-
kernels.register_kernel_factory("akernel", KernelFactory(partial(AKernelTask, execute_in_thread=self.execute_in_thread)))
20+
kernels.register_kernel_factory(
21+
"akernel", KernelFactory(partial(AKernelTask, execute_in_thread=self.execute_in_thread))
22+
)
2123

2224

2325
class AKernelThreadTaskModule(Module):
2426
async def prepare(self) -> None:
2527
kernels = await self.get(Kernels)
26-
kernels.register_kernel_factory("akernel-thread", KernelFactory(partial(AKernelTask, execute_in_thread=True)))
28+
kernels.register_kernel_factory(
29+
"akernel-thread", KernelFactory(partial(AKernelTask, execute_in_thread=True))
30+
)

pyproject.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,16 @@ version = "0.3.4"
88
description = "An asynchronous Python Jupyter kernel"
99
readme = "README.md"
1010
license = {text = "MIT"}
11-
requires-python = ">=3.9"
11+
requires-python = ">=3.10"
1212
authors = [{name = "David Brochart", email = "david.brochart@gmail.com"}]
1313
classifiers = [
1414
"Development Status :: 4 - Beta",
1515
"Programming Language :: Python",
16-
"Programming Language :: Python :: 3.9",
1716
"Programming Language :: Python :: 3.10",
1817
"Programming Language :: Python :: 3.11",
1918
"Programming Language :: Python :: 3.12",
2019
"Programming Language :: Python :: 3.13",
20+
"Programming Language :: Python :: 3.14",
2121
"Programming Language :: Python :: Implementation :: CPython",
2222
"Programming Language :: Python :: Implementation :: PyPy",
2323
]

src/akernel/akernel.py

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -56,13 +56,27 @@ def launch(
5656

5757
class AKernel:
5858
def __init__(self, mode, cache_dir, connection_file, execute_in_thread):
59-
self._to_shell_send_stream, self._to_shell_receive_stream = create_memory_object_stream[list[bytes]]()
60-
self._from_shell_send_stream, self._from_shell_receive_stream = create_memory_object_stream[list[bytes]]()
61-
self._to_control_send_stream, self._to_control_receive_stream = create_memory_object_stream[list[bytes]]()
62-
self._from_control_send_stream, self._from_control_receive_stream = create_memory_object_stream[list[bytes]]()
63-
self._to_stdin_send_stream, self._to_stdin_receive_stream = create_memory_object_stream[list[bytes]]()
64-
self._from_stdin_send_stream, self._from_stdin_receive_stream = create_memory_object_stream[list[bytes]]()
65-
self._from_iopub_send_stream, self._from_iopub_receive_stream = create_memory_object_stream[list[bytes]](max_buffer_size=float("inf"))
59+
self._to_shell_send_stream, self._to_shell_receive_stream = create_memory_object_stream[
60+
list[bytes]
61+
]()
62+
self._from_shell_send_stream, self._from_shell_receive_stream = create_memory_object_stream[
63+
list[bytes]
64+
]()
65+
self._to_control_send_stream, self._to_control_receive_stream = create_memory_object_stream[
66+
list[bytes]
67+
]()
68+
self._from_control_send_stream, self._from_control_receive_stream = (
69+
create_memory_object_stream[list[bytes]]()
70+
)
71+
self._to_stdin_send_stream, self._to_stdin_receive_stream = create_memory_object_stream[
72+
list[bytes]
73+
]()
74+
self._from_stdin_send_stream, self._from_stdin_receive_stream = create_memory_object_stream[
75+
list[bytes]
76+
]()
77+
self._from_iopub_send_stream, self._from_iopub_receive_stream = create_memory_object_stream[
78+
list[bytes]
79+
](max_buffer_size=float("inf"))
6680
self.kernel = Kernel(
6781
self._to_shell_receive_stream,
6882
self._from_shell_send_stream,

src/akernel/code.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ def get_async_code(self) -> str:
151151

152152
def get_async_bytecode(self) -> CodeType:
153153
tree = self.get_async_ast()
154-
#tree = gast.gast_to_ast(gtree)
154+
# tree = gast.gast_to_ast(gtree)
155155
bytecode = compile(tree, filename="<string>", mode="exec")
156156
return bytecode
157157

src/akernel/kernel.py

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,16 @@
77
from contextvars import ContextVar
88
from typing import Dict, Any, List, Awaitable
99

10-
from anyio import Event, create_memory_object_stream, create_task_group, from_thread, get_cancelled_exc_class, run, sleep, to_thread
10+
from anyio import (
11+
Event,
12+
create_memory_object_stream,
13+
create_task_group,
14+
from_thread,
15+
get_cancelled_exc_class,
16+
run,
17+
sleep,
18+
to_thread,
19+
)
1120
import comm # type: ignore
1221
from akernel.comm.manager import CommManager
1322
from akernel.display import display
@@ -103,6 +112,7 @@ def __init__(
103112
self.stop_event = Event()
104113
if execute_in_thread:
105114
import threading
115+
106116
self._stop_event = threading.Event()
107117
self.key = "0"
108118

@@ -191,7 +201,9 @@ async def thread_execute(self):
191201
return
192202
except Exception:
193203
exc_type, exception, traceback = sys.exc_info()
194-
from_thread.run_sync(self.from_thread_send_stream.send_nowait, (result, exception, traceback))
204+
from_thread.run_sync(
205+
self.from_thread_send_stream.send_nowait, (result, exception, traceback)
206+
)
195207

196208
async def thread_main(self) -> None:
197209
async with create_task_group() as tg:
@@ -206,8 +218,11 @@ async def start(self) -> None:
206218
async with create_task_group() as self.task_group:
207219
if self.execute_in_thread:
208220
from queue import Queue
221+
209222
self.to_thread_queue = Queue()
210-
self.from_thread_send_stream, self.from_thread_receive_stream = create_memory_object_stream(max_buffer_size=1)
223+
self.from_thread_send_stream, self.from_thread_receive_stream = (
224+
create_memory_object_stream(max_buffer_size=1)
225+
)
211226
self.task_group.start_soon(to_thread.run_sync, self.thread)
212227
msg = self.create_message("status", content={"execution_state": self.execution_state})
213228
to_send = serialize(msg, self.key)
@@ -250,7 +265,10 @@ async def listen_shell(self) -> None:
250265
# if there was a blocking cell execution, and it was interrupted,
251266
# let's ignore all the following execution requests until the pipe
252267
# is empty
253-
if self.interrupted and self.to_shell_receive_stream.statistics().tasks_waiting_send == 0:
268+
if (
269+
self.interrupted
270+
and self.to_shell_receive_stream.statistics().tasks_waiting_send == 0
271+
):
254272
self.interrupted = False
255273
msg_list = await self.to_shell_receive_stream.receive()
256274
idents, msg_list = feed_identities(msg_list)
@@ -421,7 +439,9 @@ async def execute_and_finish(
421439
namespace = self.get_namespace(parent_header)
422440
try:
423441
if self.execute_in_thread:
424-
self.to_thread_queue.put((parent, idents, self.locals[namespace][f"__async_cell{task_i}__"]))
442+
self.to_thread_queue.put(
443+
(parent, idents, self.locals[namespace][f"__async_cell{task_i}__"])
444+
)
425445
result, exception, traceback = await self.from_thread_receive_stream.receive()
426446
else:
427447
PARENT_VAR.set(parent)

src/akernel/message.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ def utcnow() -> datetime:
2929
def feed_identities(msg_list: list[bytes]) -> tuple[list[bytes], list[bytes]]:
3030
idx = msg_list.index(DELIM)
3131
idents = msg_list[:idx] or [b"foo"]
32-
return idents , msg_list[idx + 1 :] # noqa
32+
return idents, msg_list[idx + 1 :] # noqa
3333

3434

3535
def create_message_header(msg_type: str, session_id: str, msg_cnt: int) -> dict[str, Any]:

src/akernel/traceback.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
def get_traceback(code: str, exception, traceback, execution_count: int = 0):
1111
tb_list = extract_tb(traceback)
1212
tb = format_list(tb_list)
13-
#tb += [f"{Fore.RED}{type(exception).__name__}{Style.RESET_ALL}: {exception.args[0]}"]
14-
#return tb
13+
# tb += [f"{Fore.RED}{type(exception).__name__}{Style.RESET_ALL}: {exception.args[0]}"]
14+
# return tb
1515

1616
tb = cast(types.TracebackType, traceback)
1717
while True:

tests/test_kernel.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@
1111

1212

1313
TIMEOUT = 5
14-
KERNELSPEC_PATH = str(Path(sys.prefix) / "share" / "jupyter" / "kernels" / "akernel" / "kernel.json")
14+
KERNELSPEC_PATH = str(
15+
Path(sys.prefix) / "share" / "jupyter" / "kernels" / "akernel" / "kernel.json"
16+
)
1517

1618

1719
ANSI_ESCAPE = re.compile(r"\x1B(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~])")

0 commit comments

Comments
 (0)