Skip to content

Commit 7170b49

Browse files
authored
fix: return JSON body for message-only 400 aborts (#86)
1 parent 473d390 commit 7170b49

2 files changed

Lines changed: 25 additions & 0 deletions

File tree

src/optimizer/app.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,9 @@ def handle_validation_error(error):
4545
error.data['details'] = error.data['errors']
4646
del error.data['errors']
4747
return error.data, 400
48+
elif error.data:
49+
# plain api.abort(400, message) calls carry only a message
50+
return error.data, 400
4851
else:
4952
raise error
5053

tests/test_app.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,3 +34,25 @@ def test_optimizer(test_case: pathlib.Path):
3434
expected_objective_value,
3535
rtol=1e-05, atol=1e-08, equal_nan=False), \
3636
f"objective value: {actual_objective_value}, expected was: {expected_objective_value}"
37+
38+
39+
def test_abort_returns_json_message():
40+
# message-only api.abort(400, ...) must return a JSON body, not an empty response
41+
client = app.test_client()
42+
request = {
43+
"batteries": [{
44+
"s_min": 0, "s_max": 10000, "s_initial": 5000,
45+
"c_min": 0, "c_max": 5000, "d_max": 5000, "p_a": 0.1,
46+
}],
47+
"time_series": {
48+
"dt": [3600, 3600],
49+
"gt": [1000, 1000],
50+
"ft": [0, 0],
51+
"p_N": [0.3, 0.3],
52+
"p_E": [0.1], # length mismatch triggers api.abort(400, message)
53+
},
54+
}
55+
response = client.post("/optimize/charge-schedule", json=request)
56+
assert response.status_code == 400
57+
assert response.json is not None
58+
assert "message" in response.json

0 commit comments

Comments
 (0)