From 6f7342758a33ed1eb732d8b10212f1bcaa167888 Mon Sep 17 00:00:00 2001 From: Duc Trung Le Date: Tue, 17 Dec 2024 20:57:57 +0100 Subject: [PATCH 1/4] Gracefully handling non-existing fork room --- projects/jupyter-server-ydoc/jupyter_server_ydoc/handlers.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/projects/jupyter-server-ydoc/jupyter_server_ydoc/handlers.py b/projects/jupyter-server-ydoc/jupyter_server_ydoc/handlers.py index b76666d4..c3e768e5 100644 --- a/projects/jupyter-server-ydoc/jupyter_server_ydoc/handlers.py +++ b/projects/jupyter-server-ydoc/jupyter_server_ydoc/handlers.py @@ -676,7 +676,10 @@ async def delete(self, fork_roomid): """ Deletes a forked document, and optionally merges it back in the root document. """ - fork_info = FORK_ROOMS[fork_roomid] + fork_info = FORK_ROOMS.get(fork_roomid, None) + if fork_info is None: + self.set_status(404) + return self.finish({"code": 404, "error": "Fork room does not exist"}) root_roomid = fork_info["root_roomid"] del FORK_ROOMS[fork_roomid] if self.get_query_argument("merge") == "true": From 8012a81ae7412f90158836142e47b138be507d3b Mon Sep 17 00:00:00 2001 From: Duc Trung Le Date: Wed, 18 Dec 2024 11:14:39 +0100 Subject: [PATCH 2/4] Handle RoomNotFound error on fork creation --- .../jupyter-server-ydoc/jupyter_server_ydoc/handlers.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/projects/jupyter-server-ydoc/jupyter_server_ydoc/handlers.py b/projects/jupyter-server-ydoc/jupyter_server_ydoc/handlers.py index c3e768e5..e89ae266 100644 --- a/projects/jupyter-server-ydoc/jupyter_server_ydoc/handlers.py +++ b/projects/jupyter-server-ydoc/jupyter_server_ydoc/handlers.py @@ -642,7 +642,12 @@ async def put(self, root_roomid): Optionally keeps the fork in sync with the root. """ fork_roomid = uuid4().hex - root_room = await self._websocket_server.get_room(root_roomid) + try: + root_room = await self._websocket_server.get_room(root_roomid) + except RoomNotFound: + self.set_status(404) + self.finish({"code": 404, "error": "Room not found"}) + update = root_room.ydoc.get_update() fork_ydoc = Doc() fork_ydoc.apply_update(update) From 587a4965706c59679956385a903612ec983e687a Mon Sep 17 00:00:00 2001 From: Duc Trung Le Date: Wed, 18 Dec 2024 11:22:20 +0100 Subject: [PATCH 3/4] Missing return --- projects/jupyter-server-ydoc/jupyter_server_ydoc/handlers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/jupyter-server-ydoc/jupyter_server_ydoc/handlers.py b/projects/jupyter-server-ydoc/jupyter_server_ydoc/handlers.py index e89ae266..a4af69f5 100644 --- a/projects/jupyter-server-ydoc/jupyter_server_ydoc/handlers.py +++ b/projects/jupyter-server-ydoc/jupyter_server_ydoc/handlers.py @@ -646,7 +646,7 @@ async def put(self, root_roomid): root_room = await self._websocket_server.get_room(root_roomid) except RoomNotFound: self.set_status(404) - self.finish({"code": 404, "error": "Room not found"}) + return self.finish({"code": 404, "error": "Room not found"}) update = root_room.ydoc.get_update() fork_ydoc = Doc() From 31679b65b2324d0edec63aff15627b0cb8e24f8e Mon Sep 17 00:00:00 2001 From: Duc Trung Le Date: Wed, 18 Dec 2024 11:37:08 +0100 Subject: [PATCH 4/4] Apply suggestions from code review Co-authored-by: David Brochart --- projects/jupyter-server-ydoc/jupyter_server_ydoc/handlers.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/jupyter-server-ydoc/jupyter_server_ydoc/handlers.py b/projects/jupyter-server-ydoc/jupyter_server_ydoc/handlers.py index a4af69f5..63691d91 100644 --- a/projects/jupyter-server-ydoc/jupyter_server_ydoc/handlers.py +++ b/projects/jupyter-server-ydoc/jupyter_server_ydoc/handlers.py @@ -646,7 +646,7 @@ async def put(self, root_roomid): root_room = await self._websocket_server.get_room(root_roomid) except RoomNotFound: self.set_status(404) - return self.finish({"code": 404, "error": "Room not found"}) + return self.finish({"code": 404, "error": "Root room not found"}) update = root_room.ydoc.get_update() fork_ydoc = Doc() @@ -684,7 +684,7 @@ async def delete(self, fork_roomid): fork_info = FORK_ROOMS.get(fork_roomid, None) if fork_info is None: self.set_status(404) - return self.finish({"code": 404, "error": "Fork room does not exist"}) + return self.finish({"code": 404, "error": "Fork room not found"}) root_roomid = fork_info["root_roomid"] del FORK_ROOMS[fork_roomid] if self.get_query_argument("merge") == "true":