120
120
AsyncContentsManager ,
121
121
ContentsManager ,
122
122
)
123
+ from jupyter_server .services .events .bus import EventBus
123
124
from jupyter_server .services .kernels .kernelmanager import (
124
125
AsyncMappingKernelManager ,
125
126
MappingKernelManager ,
164
165
sessions = ["jupyter_server.services.sessions.handlers" ],
165
166
shutdown = ["jupyter_server.services.shutdown" ],
166
167
view = ["jupyter_server.view.handlers" ],
168
+ events = ["jupyter_server.services.events.handlers" ],
167
169
)
168
170
169
171
# Added for backwards compatibility from classic notebook server.
@@ -207,6 +209,7 @@ def __init__(
207
209
session_manager ,
208
210
kernel_spec_manager ,
209
211
config_manager ,
212
+ event_bus ,
210
213
extra_services ,
211
214
log ,
212
215
base_url ,
@@ -242,6 +245,7 @@ def __init__(
242
245
session_manager ,
243
246
kernel_spec_manager ,
244
247
config_manager ,
248
+ event_bus ,
245
249
extra_services ,
246
250
log ,
247
251
base_url ,
@@ -263,6 +267,7 @@ def init_settings(
263
267
session_manager ,
264
268
kernel_spec_manager ,
265
269
config_manager ,
270
+ event_bus ,
266
271
extra_services ,
267
272
log ,
268
273
base_url ,
@@ -354,6 +359,7 @@ def init_settings(
354
359
config_manager = config_manager ,
355
360
authorizer = authorizer ,
356
361
identity_provider = identity_provider ,
362
+ event_bus = event_bus ,
357
363
# handlers
358
364
extra_services = extra_services ,
359
365
# Jupyter stuff
@@ -769,6 +775,7 @@ class ServerApp(JupyterApp):
769
775
GatewaySessionManager ,
770
776
GatewayClient ,
771
777
Authorizer ,
778
+ EventBus ,
772
779
]
773
780
774
781
subcommands = dict (
@@ -794,6 +801,7 @@ class ServerApp(JupyterApp):
794
801
"sessions" ,
795
802
"shutdown" ,
796
803
"view" ,
804
+ "events" ,
797
805
)
798
806
799
807
_log_formatter_cls = LogFormatter
@@ -1561,6 +1569,12 @@ def _default_kernel_spec_manager_class(self):
1561
1569
),
1562
1570
)
1563
1571
1572
+ event_bus = Instance (
1573
+ EventBus ,
1574
+ allow_none = True ,
1575
+ help = "An EventBus for emitting structured event data from Jupyter Server and extensions." ,
1576
+ )
1577
+
1564
1578
info_file = Unicode ()
1565
1579
1566
1580
@default ("info_file" )
@@ -1906,6 +1920,10 @@ def init_logging(self):
1906
1920
logger .parent = self .log
1907
1921
logger .setLevel (self .log .level )
1908
1922
1923
+ def init_eventbus (self ):
1924
+ """Initialize the Event Bus."""
1925
+ self .event_bus = EventBus .instance (parent = self )
1926
+
1909
1927
def init_webapp (self ):
1910
1928
"""initialize tornado webapp"""
1911
1929
self .tornado_settings ["allow_origin" ] = self .allow_origin
@@ -1970,6 +1988,7 @@ def init_webapp(self):
1970
1988
self .session_manager ,
1971
1989
self .kernel_spec_manager ,
1972
1990
self .config_manager ,
1991
+ self .event_bus ,
1973
1992
self .extra_services ,
1974
1993
self .log ,
1975
1994
self .base_url ,
@@ -2436,6 +2455,7 @@ def initialize(
2436
2455
if find_extensions :
2437
2456
self .find_server_extensions ()
2438
2457
self .init_logging ()
2458
+ self .init_eventbus ()
2439
2459
self .init_server_extensions ()
2440
2460
2441
2461
# Special case the starter extension and load
@@ -2762,6 +2782,8 @@ async def _cleanup(self):
2762
2782
await self .cleanup_kernels ()
2763
2783
if getattr (self , "session_manager" , None ):
2764
2784
self .session_manager .close ()
2785
+ if getattr (self , "event_bus" , None ):
2786
+ self .event_bus .clear_instance ()
2765
2787
2766
2788
def start_ioloop (self ):
2767
2789
"""Start the IO Loop."""
0 commit comments