Skip to content

Commit ffcdfef

Browse files
m-messerclaude
andcommitted
Resolve merge conflict: drop /preview case, fix healthcheck indentation in handle_muEd_command
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent e0c7b3f commit ffcdfef

2 files changed

Lines changed: 59 additions & 31 deletions

File tree

handler.py

Lines changed: 39 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -122,26 +122,49 @@ def handle_muEd_command(event: JsonType, command: str) -> HandlerResponse:
122122
Returns:
123123
HandlerResponse: The response object returned by the handler.
124124
"""
125-
version_error = check_muEd_version(event)
126-
if version_error:
127-
return wrap_muEd_response(version_error, event, 406)
125+
try:
126+
version_error = check_muEd_version(event)
127+
if version_error:
128+
return wrap_muEd_response(version_error, event, 406)
128129

129-
if command == "eval":
130-
body = parse.body(event)
131-
validate.body(body, MuEdReqBodyValidators.EVALUATION)
132-
response = commands.evaluate_muEd(body)
133-
validate.body(response, MuEdResBodyValidators.EVALUATION)
130+
if command == "eval":
131+
body = parse.body(event)
132+
validate.body(body, MuEdReqBodyValidators.EVALUATION)
133+
response = commands.evaluate_muEd(body)
134+
validate.body(response, MuEdResBodyValidators.EVALUATION)
134135

135-
elif command == "healthcheck":
136-
response = commands.healthcheck_muEd()
137-
validate.body(response, MuEdResBodyValidators.HEALTHCHECK)
136+
elif command == "healthcheck":
137+
response = commands.healthcheck_muEd()
138+
validate.body(response, MuEdResBodyValidators.HEALTHCHECK)
138139

139-
else:
140-
response = Response(
141-
error=ErrorResponse(message=f"Unknown command '{command}'.")
142-
)
140+
else:
141+
error = {
142+
"title": "Not implemented",
143+
"message": f"Unknown command '{command}'.",
144+
"code": "NOT_IMPLEMENTED",
145+
}
146+
return wrap_muEd_response(error, event, 501)
143147

144-
return wrap_muEd_response(response, event)
148+
return wrap_muEd_response(response, event)
149+
150+
except (ParseError, ValidationError) as e:
151+
error = {
152+
"title": "Bad request",
153+
"message": e.message,
154+
"code": "VALIDATION_ERROR",
155+
"details": {"error": str(e.error_thrown)} if e.error_thrown else None,
156+
}
157+
return wrap_muEd_response(error, event, 400)
158+
159+
except EvaluationException as e:
160+
detail = str(e) if str(e) else repr(e)
161+
error = {"title": "Internal server error", "message": detail, "code": "INTERNAL_ERROR"}
162+
return wrap_muEd_response(error, event, 500)
163+
164+
except Exception as e:
165+
detail = str(e) if str(e) else repr(e)
166+
error = {"title": "Internal server error", "message": detail, "code": "INTERNAL_ERROR"}
167+
return wrap_muEd_response(error, event, 500)
145168

146169

147170
def handler(event: JsonType, _=None) -> HandlerResponse:

tests/mued_handling_test.py

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,9 @@ def test_evaluate_missing_submission_returns_error(self):
7878

7979
response = handler(event)
8080

81-
self.assertIn("error", response)
82-
self.assertIn("submission", response["error"]["detail"]) # type: ignore
81+
self.assertEqual(response["statusCode"], 400)
82+
body = json.loads(response["body"])
83+
self.assertEqual(body["code"], "VALIDATION_ERROR")
8384

8485
def test_evaluate_invalid_submission_type_returns_error(self):
8586
event = {
@@ -89,18 +90,19 @@ def test_evaluate_invalid_submission_type_returns_error(self):
8990

9091
response = handler(event)
9192

92-
self.assertIn("error", response)
93+
self.assertEqual(response["statusCode"], 400)
94+
body = json.loads(response["body"])
95+
self.assertEqual(body["code"], "VALIDATION_ERROR")
9396

9497
def test_evaluate_bodyless_event_returns_error(self):
9598
event = {"path": "/evaluate", "random": "metadata"}
9699

97100
response = handler(event)
98101

99-
self.assertIn("error", response)
100-
self.assertEqual(
101-
response["error"]["message"], # type: ignore
102-
"No data supplied in request body.",
103-
)
102+
self.assertEqual(response["statusCode"], 400)
103+
body = json.loads(response["body"])
104+
self.assertEqual(body["code"], "VALIDATION_ERROR")
105+
self.assertEqual(body["message"], "No data supplied in request body.")
104106

105107
def test_healthcheck(self):
106108
event = {"path": "/evaluate/health"}
@@ -325,18 +327,19 @@ def test_preview_missing_submission_returns_error(self):
325327

326328
response = handler(event)
327329

328-
self.assertIn("error", response)
330+
self.assertEqual(response["statusCode"], 400)
331+
body = json.loads(response["body"])
332+
self.assertEqual(body["code"], "VALIDATION_ERROR")
329333

330334
def test_preview_bodyless_event_returns_error(self):
331335
event = {"path": "/evaluate", "random": "metadata"}
332336

333337
response = handler(event)
334338

335-
self.assertIn("error", response)
336-
self.assertEqual(
337-
response["error"]["message"], # type: ignore
338-
"No data supplied in request body.",
339-
)
339+
self.assertEqual(response["statusCode"], 400)
340+
body = json.loads(response["body"])
341+
self.assertEqual(body["code"], "VALIDATION_ERROR")
342+
self.assertEqual(body["message"], "No data supplied in request body.")
340343

341344
def test_preview_invalid_submission_type_returns_error(self):
342345
event = {
@@ -349,7 +352,9 @@ def test_preview_invalid_submission_type_returns_error(self):
349352

350353
response = handler(event)
351354

352-
self.assertIn("error", response)
355+
self.assertEqual(response["statusCode"], 400)
356+
body = json.loads(response["body"])
357+
self.assertEqual(body["code"], "VALIDATION_ERROR")
353358

354359
def test_presubmission_disabled_runs_normal_evaluation(self):
355360
event = {

0 commit comments

Comments
 (0)