10
10
from jupyter_ydoc .ybasedoc import YBaseDoc
11
11
from pycrdt import Doc
12
12
from pycrdt_websocket .ystore import BaseYStore
13
- from traitlets import Bool , Float , Type
13
+ from pycrdt_websocket .websocket_server import exception_logger
14
+ from traitlets import Bool , Float , Type , Set , Instance
14
15
15
16
from .handlers import DocSessionHandler , YDocWebSocketHandler
16
17
from .loaders import FileLoaderMapping
24
25
)
25
26
from .websocketserver import JupyterWebsocketServer , RoomNotFound
26
27
27
-
28
28
class YDocExtension (ExtensionApp ):
29
29
name = "jupyter_server_ydoc"
30
30
app_name = "Collaboration"
@@ -75,6 +75,10 @@ class YDocExtension(ExtensionApp):
75
75
model.""" ,
76
76
)
77
77
78
+ _running_ywebsocket_server = Instance (asyncio .Task , allow_none = True )
79
+ ywebsocket_server = Instance (JupyterWebsocketServer , allow_none = True )
80
+
81
+
78
82
def initialize (self ):
79
83
super ().initialize ()
80
84
self .serverapp .event_logger .register_event_schema (EVENTS_SCHEMA_PATH )
@@ -90,6 +94,14 @@ def initialize_settings(self):
90
94
}
91
95
)
92
96
97
+ self .ywebsocket_server = JupyterWebsocketServer (
98
+ rooms_ready = False ,
99
+ auto_clean_rooms = False ,
100
+ ystore_class = self .ystore_class ,
101
+ log = self .log ,
102
+ exception_logger = exception_logger
103
+ )
104
+
93
105
def initialize_handlers (self ):
94
106
self .serverapp .web_app .settings .setdefault (
95
107
"page_config_data" ,
@@ -103,13 +115,6 @@ def initialize_handlers(self):
103
115
for k , v in self .config .get (self .ystore_class .__name__ , {}).items ():
104
116
setattr (self .ystore_class , k , v )
105
117
106
- self .ywebsocket_server = JupyterWebsocketServer (
107
- rooms_ready = False ,
108
- auto_clean_rooms = False ,
109
- ystore_class = self .ystore_class ,
110
- log = self .log ,
111
- )
112
-
113
118
# self.settings is local to the ExtensionApp but here we need
114
119
# the global app settings in which the file id manager will register
115
120
# itself maybe at a later time.
@@ -134,6 +139,14 @@ def initialize_handlers(self):
134
139
]
135
140
)
136
141
142
+ async def start_extension (self ):
143
+ """Start the y-websocket server.
144
+ """
145
+ self .log .info ("Starting the Collaborative Document Server." )
146
+
147
+ # Start the websocket server
148
+ self ._running_ywebsocket_server = asyncio .create_task (self .ywebsocket_server .start ())
149
+
137
150
async def get_document (
138
151
self : YDocExtension ,
139
152
* ,
0 commit comments