Skip to content

Commit fd89dfd

Browse files
committed
Update exception strategy and tests
1 parent f5bb5a8 commit fd89dfd

File tree

2 files changed

+17
-22
lines changed

2 files changed

+17
-22
lines changed

jupyter_server/services/events/handlers.py

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
from typing import TYPE_CHECKING, Any, Dict, Optional, cast
1111

1212
from jupyter_core.utils import ensure_async
13-
from jupyter_events.logger import SchemaNotRegistered
1413
from tornado import web, websocket
1514

1615
from jupyter_server.auth.decorator import authorized, ws_authenticated
@@ -112,21 +111,21 @@ async def post(self):
112111
raise web.HTTPError(400, "No JSON data provided")
113112

114113
try:
114+
# Validate payload and verify schema is registered.
115115
validate_model(payload)
116+
schema_id = cast(str, payload.get("schema_id"))
117+
schema = self.event_logger.schemas.get(schema_id)
116118
self.event_logger.emit(
117-
schema_id=cast(str, payload.get("schema_id")),
119+
schema_id=schema.id,
118120
data=cast("Dict[str, Any]", payload.get("data")),
119121
timestamp_override=get_timestamp(payload),
120122
)
121123
self.set_status(204)
122124
self.finish()
123-
except web.HTTPError:
124-
raise
125-
except SchemaNotRegistered as e:
126-
message = f"Unregistered event schema: ${str(e)}"
127-
raise web.HTTPError(400, message) from e
128125
except Exception as e:
129-
raise web.HTTPError(500, str(e)) from e
126+
# All known exceptions are raised by bad requests, e.g.,
127+
# unregistered schema, invalid emission data payload, etc.
128+
raise web.HTTPError(400, str(e)) from e
130129

131130

132131
default_handlers = [

tests/services/events/test_api.py

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -127,15 +127,6 @@ async def test_post_event(jp_fetch, event_logger_sink, payload):
127127
}
128128
"""
129129

130-
131-
@pytest.mark.parametrize("payload", [payload_3, payload_4, payload_5, payload_6, payload_7])
132-
async def test_post_event_400(jp_fetch, event_logger, payload):
133-
with pytest.raises(tornado.httpclient.HTTPClientError) as e:
134-
await jp_fetch("api", "events", method="POST", body=payload)
135-
136-
assert expected_http_error(e, 400)
137-
138-
139130
payload_8 = """\
140131
{
141132
"schema_id": "http://event.mock.jupyter.org/message",
@@ -157,9 +148,14 @@ async def test_post_event_400(jp_fetch, event_logger, payload):
157148
"""
158149

159150

160-
@pytest.mark.parametrize("payload", [payload_8, payload_9])
161-
async def test_post_event_500(jp_fetch, event_logger, payload):
162-
with pytest.raises(tornado.httpclient.HTTPClientError) as e:
151+
@pytest.mark.parametrize(
152+
"payload",
153+
[payload_3, payload_4, payload_5, payload_6, payload_7, payload_8, payload_9],
154+
)
155+
async def test_post_event_400(jp_fetch, event_logger, payload):
156+
try:
163157
await jp_fetch("api", "events", method="POST", body=payload)
164-
165-
assert expected_http_error(e, 500)
158+
except Exception as exception:
159+
assert exception.code == 400
160+
return
161+
assert "failed" == True

0 commit comments

Comments
 (0)