@@ -471,13 +471,53 @@ async def put(self):
471
471
if idx in root_state :
472
472
del root_state [idx ]
473
473
else :
474
+ self .set_status (404 )
474
475
raise RuntimeError (f"Could not find root document fork with ID: { fork_roomid } " )
475
476
fork_room = await self ._websocket_server .get_room (fork_roomid )
476
477
fork_ydoc = fork_room .ydoc
477
- update = fork_ydoc .get_update ()
478
- root_ydoc .apply_update (update )
478
+ fork_update = fork_ydoc .get_update ()
479
+ root_ydoc .apply_update (fork_update )
479
480
root_room .fork_ydocs .remove (fork_ydoc )
480
481
fork_state = fork_ydoc .get ("state" , type = Map )
481
482
fork_state ["merge" ] = fork_roomid
482
483
#self._websocket_server.delete_room(name=fork_roomid)
483
484
self .set_status (200 )
485
+
486
+
487
+ class DocDeleteHandler (APIHandler ):
488
+ """
489
+ Jupyter Server's handler to delete a document.
490
+ """
491
+
492
+ auth_resource = "contents"
493
+
494
+ def initialize (
495
+ self ,
496
+ ywebsocket_server : JupyterWebsocketServer ,
497
+ ) -> None :
498
+ self ._websocket_server = ywebsocket_server
499
+
500
+ @web .authenticated
501
+ @authorized
502
+ async def delete (self ):
503
+ """
504
+ Deletes a forked document.
505
+ """
506
+ model = self .get_json_body ()
507
+ fork_roomid = model ["fork_roomid" ]
508
+ root_room = await self ._websocket_server .get_room (model ["root_roomid" ])
509
+ root_ydoc = root_room .ydoc
510
+ idx = f"fork_{ fork_roomid } "
511
+ root_state = root_ydoc .get ("state" , type = Map )
512
+ if idx in root_state :
513
+ del root_state [idx ]
514
+ else :
515
+ self .set_status (404 )
516
+ raise RuntimeError (f"Could not find root document fork with ID: { fork_roomid } " )
517
+ fork_room = await self ._websocket_server .get_room (fork_roomid )
518
+ fork_ydoc = fork_room .ydoc
519
+ root_room .fork_ydocs .remove (fork_ydoc )
520
+ fork_state = fork_ydoc .get ("state" , type = Map )
521
+ fork_state ["delete" ] = fork_roomid
522
+ #self._websocket_server.delete_room(name=fork_roomid)
523
+ self .set_status (200 )
0 commit comments