Skip to content

Commit 55d71ae

Browse files
author
Naresh Kumar Kolloju
committed
[WIP] Fix issues using RTCore Yroom
1 parent f584002 commit 55d71ae

File tree

5 files changed

+18
-6
lines changed

5 files changed

+18
-6
lines changed

jupyter_rtc_core/kernels/kernel_client.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,7 @@ async def handle_iopub_message(self, msg: list[bytes]) -> t.Optional[list[bytes]
199199
for yroom in self._yrooms:
200200
# NOTE: We need to create a real message here.
201201
awareness_update_message = b""
202-
self.log.debug(f"Update Awareness here: {dmsg}. YRoom: {yroom}")
202+
self.log.info(f"Update Awareness here: {dmsg}. YRoom: {yroom}")
203203
#self.log.debug(f"Getting YDoc: {await yroom.get_ydoc()}")
204204
#yroom.add_message(awareness_update_message)
205205

jupyter_rtc_core/kernels/kernel_manager.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import typing
22
import asyncio
3+
from datetime import datetime
34
from traitlets import default
45
from traitlets import Instance
56
from traitlets import Int
@@ -141,6 +142,7 @@ async def connect(self):
141142
self.set_state(LifecycleStates.CONNECTING, ExecutionStates.BUSY)
142143
# Use the new API for getting a client.
143144
self.main_client = self.client()
145+
self.last_activity = datetime.utcnow()
144146
# Track execution state by watching all messages that come through
145147
# the kernel client.
146148
self.main_client.add_listener(self.execution_state_listener)
@@ -183,6 +185,7 @@ def broadcast_state(self):
183185
def execution_state_listener(self, channel_name: str, msg: list[bytes]):
184186
"""Set the execution state by watching messages returned by the shell channel."""
185187
# Only continue if we're on the IOPub where the status is published.
188+
self.last_activity = datetime.utcnow()
186189
if channel_name != "iopub":
187190
return
188191

jupyter_rtc_core/rooms/yroom.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ def __init__(
6464
self._client_group = YjsClientGroup(room_id=room_id, log=self.log, loop=self._loop)
6565
self._ydoc = pycrdt.Doc()
6666
self._awareness = pycrdt.Awareness(ydoc=self._ydoc)
67-
_, file_type, _ = self.room_id.split(":")
67+
file_type, _, _ = self.room_id.split(":")
6868
JupyterYDocClass = cast(
6969
type[YBaseDoc],
7070
jupyter_ydoc_classes.get(file_type, jupyter_ydoc_classes["file"])

jupyter_rtc_core/rooms/yroom_file_api.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ class YRoomFileAPI:
3434
# See `filemanager.py` in `jupyter_server` for references on supported file
3535
# formats & file types.
3636
room_id: str
37-
file_format: Literal["text", "base64"]
37+
file_format: Literal["text", "base64", "json"]
3838
file_type: Literal["file", "notebook"]
3939
file_id: str
4040
log: logging.Logger
@@ -173,6 +173,7 @@ async def _process_scheduled_saves(self) -> None:
173173
try:
174174
assert self.jupyter_ydoc
175175
path = self.get_path()
176+
self.log.info(f"Saving content for room ID '{self.room_id}'. {path}. {self.file_format} {self.file_type}")
176177
content = self.jupyter_ydoc.source
177178
file_format = self.file_format
178179
file_type = self.file_type if self.file_type in SAVEABLE_FILE_TYPES else "file"

jupyter_rtc_core/session_manager.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,18 @@ def get_kernel_client(self, kernel_id) -> DocumentAwareKernelClient:
3535
kernel_client = kernel_manager.main_client
3636
return kernel_client
3737

38-
def get_yroom(self, path) -> YRoom:
38+
def get_yroom(self, path, type) -> YRoom:
3939
"""Get the yroom for a given path."""
4040
file_id = self.file_id_manager.get_id(path)
41-
yroom = self.yroom_manager.get_room(file_id)
41+
room_id = self.build_notebook_room_id(file_id, type)
42+
self.log.info(f"Getting yroom for file {room_id}")
43+
yroom = self.yroom_manager.get_room(room_id)
4244
return yroom
4345

46+
def build_notebook_room_id(self, file_id, file_type) -> str:
47+
# TOOD: extract/how to construct file format?
48+
return f"{file_type}:notebook:{file_id}"
49+
4450
async def create_session(
4551
self,
4652
path: Optional[str] = None,
@@ -52,6 +58,8 @@ async def create_session(
5258
"""
5359
After creating a session, connects the yroom to the kernel client.
5460
"""
61+
self.log.info(f"Creating session for path {path}, kernel_id {kernel_id}")
62+
path = "Untitled.ipynb"
5563
output = await super().create_session(
5664
path,
5765
name,
@@ -65,7 +73,7 @@ async def create_session(
6573

6674
# NOTE: Question - is room_id equivalent to file ID?
6775
# Connect this session's yroom to the kernel.
68-
yroom = self.get_yroom(path)
76+
yroom = self.get_yroom(path=path, type=type)
6977
# TODO: we likely have a race condition here... need to
7078
# think about it more. Currently, the kernel client gets
7179
# created after the kernel starts fully. We need the

0 commit comments

Comments
 (0)