Skip to content

Commit 9804ca7

Browse files
committed
Use execution stack
1 parent 77cdb6f commit 9804ca7

File tree

6 files changed

+257
-67
lines changed

6 files changed

+257
-67
lines changed

conftest.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@
22

33
pytest_plugins = ["jupyter_server.pytest_plugin"]
44

5+
56
@pytest.fixture
67
def jp_server_config(jp_server_config):
7-
return {"ServerApp": {"jpserver_extensions": {"jupyter_server_nbmodel": True, "jupyter_server_ydoc": True}}}
8+
return {
9+
"ServerApp": {
10+
"jpserver_extensions": {"jupyter_server_nbmodel": True, "jupyter_server_ydoc": True}
11+
}
12+
}

jupyter_server_config.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
c.YDocExtension.server_side_execution = True
1+
c.YDocExtension.server_side_execution = True # noqa F821

jupyter_server_nbmodel/__init__.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
"""A Jupyter Server extension to execute code cell from the server."""
2+
23
from .extension import Extension
4+
35
__version__ = "0.1.0"
46

57

68
def _jupyter_server_extension_points():
7-
return [{
8-
"module": "jupyter_server_nbmodel",
9-
"app": Extension
10-
}]
9+
return [{"module": "jupyter_server_nbmodel", "app": Extension}]

jupyter_server_nbmodel/extension.py

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,23 +3,47 @@
33
from jupyter_server.extension.application import ExtensionApp
44
from jupyter_server.services.kernels.handlers import _kernel_id_regex
55

6-
from .handlers import ExecuteHandler
6+
from .handlers import ExecuteHandler, ExecutionStack, RequestHandler
77
from .log import get_logger
88

99
RTC_EXTENSIONAPP_NAME = "jupyter_server_ydoc"
1010

11+
STOP_TIMEOUT = 3
12+
13+
_request_id_regex = r"(?P<request_id>\w+-\w+-\w+-\w+-\w+)"
14+
1115

1216
class Extension(ExtensionApp):
1317
name = "jupyter_server_nbmodel"
1418

1519
def initialize_handlers(self):
1620
rtc_extension = None
17-
rtc_extensions = self.serverapp.extension_manager.extension_apps.get(RTC_EXTENSIONAPP_NAME, set())
21+
rtc_extensions = self.serverapp.extension_manager.extension_apps.get(
22+
RTC_EXTENSIONAPP_NAME, set()
23+
)
1824
n_extensions = len(rtc_extensions)
1925
if n_extensions:
2026
if n_extensions > 1:
2127
get_logger().warning("%i collaboration extensions found.", n_extensions)
2228
rtc_extension = next(iter(rtc_extensions))
23-
self.handlers.extend([
24-
(f"/api/kernels/{_kernel_id_regex}/execute", ExecuteHandler, { "ydoc_extension": rtc_extension })
25-
])
29+
30+
self.__tasks = ExecutionStack()
31+
32+
self.handlers.extend(
33+
[
34+
(
35+
f"/api/kernels/{_kernel_id_regex}/execute",
36+
ExecuteHandler,
37+
{"ydoc_extension": rtc_extension, "execution_stack": self.__tasks},
38+
),
39+
(
40+
f"/api/kernels/{_kernel_id_regex}/requests/{_request_id_regex}",
41+
RequestHandler,
42+
{"execution_stack": self.__tasks},
43+
),
44+
]
45+
)
46+
47+
async def stop_extension(self):
48+
if hasattr(self, "__tasks"):
49+
del self.__tasks

0 commit comments

Comments
 (0)