|
2 | 2 |
|
3 | 3 | .. versionadded:: 2.0
|
4 | 4 | """
|
5 |
| -import logging |
| 5 | +import json |
6 | 6 | from datetime import datetime
|
7 | 7 | from typing import Any, Dict, Optional
|
8 | 8 |
|
| 9 | +from jupyter_events import EventLogger |
9 | 10 | from tornado import web, websocket
|
10 | 11 |
|
11 | 12 | from jupyter_server.auth import authorized
|
|
16 | 17 | AUTH_RESOURCE = "events"
|
17 | 18 |
|
18 | 19 |
|
19 |
| -class WebSocketLoggingHandler(logging.Handler): |
20 |
| - """Python logging handler that routes records to a Tornado websocket.""" |
21 |
| - |
22 |
| - def __init__(self, websocket, *args, **kwargs): |
23 |
| - super().__init__(*args, **kwargs) |
24 |
| - self.websocket = websocket |
25 |
| - |
26 |
| - def emit(self, record): |
27 |
| - """Emit the message across the websocket""" |
28 |
| - self.websocket.write_message(record.msg) |
29 |
| - |
30 |
| - |
31 | 20 | class SubscribeWebsocket(
|
32 | 21 | JupyterHandler,
|
33 | 22 | websocket.WebSocketHandler,
|
@@ -56,16 +45,18 @@ async def get(self, *args, **kwargs):
|
56 | 45 | res = super().get(*args, **kwargs)
|
57 | 46 | await res
|
58 | 47 |
|
| 48 | + async def event_listener(self, logger: EventLogger, schema_id: str, data: dict) -> None: |
| 49 | + capsule = dict(schema_id=schema_id, **data) |
| 50 | + self.write_message(json.dumps(capsule)) |
| 51 | + |
59 | 52 | def open(self):
|
60 | 53 | """Routes events that are emitted by Jupyter Server's
|
61 | 54 | EventBus to a WebSocket client in the browser.
|
62 | 55 | """
|
63 |
| - self.logging_handler = WebSocketLoggingHandler(self) |
64 |
| - # To do: add an eventlog.add_handler method to jupyter_events. |
65 |
| - self.event_logger.register_handler(self.logging_handler) |
| 56 | + self.event_logger.add_listener(listener=self.event_listener) |
66 | 57 |
|
67 | 58 | def on_close(self):
|
68 |
| - self.event_logger.remove_handler(self.logging_handler) |
| 59 | + self.event_logger.remove_listener(listener=self.event_listener) |
69 | 60 |
|
70 | 61 |
|
71 | 62 | def validate_model(data: Dict[str, Any]) -> None:
|
@@ -110,7 +101,6 @@ async def post(self):
|
110 | 101 | validate_model(payload)
|
111 | 102 | self.event_logger.emit(
|
112 | 103 | schema_id=payload.get("schema_id"),
|
113 |
| - version=payload.get("version"), |
114 | 104 | data=payload.get("data"),
|
115 | 105 | timestamp_override=get_timestamp(payload),
|
116 | 106 | )
|
|
0 commit comments