Skip to content

Commit ab44f87

Browse files
bchamppyaythomas
authored andcommitted
fix: parse callback result from body directly
1 parent fcb11bc commit ab44f87

File tree

2 files changed

+6
-71
lines changed

2 files changed

+6
-71
lines changed

src/aws_durable_execution_sdk_python_testing/web/handlers.py

Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -187,33 +187,19 @@ def _no_content_response(
187187
def _parse_callback_result_payload(self, request: HTTPRequest) -> bytes:
188188
"""Parse callback result payload from request body.
189189
190-
Expects JSON payload with base64-encoded Result field.
191-
192190
Args:
193-
request: The HTTP request containing the JSON payload
191+
request: The HTTP request containing the binary payload
194192
195193
Returns:
196-
bytes: The decoded result payload
194+
bytes: The result payload
197195
198196
Raises:
199197
InvalidParameterValueException: If payload parsing fails
200198
"""
201199
if not request.body or not isinstance(request.body, bytes):
202200
return b""
203201

204-
try:
205-
payload = json.loads(request.body.decode("utf-8"))
206-
if isinstance(payload, dict) and "Result" in payload:
207-
result_value = payload["Result"]
208-
if isinstance(result_value, str):
209-
return base64.b64decode(result_value)
210-
return b""
211-
except (json.JSONDecodeError, UnicodeDecodeError) as e:
212-
msg = f"Failed to parse JSON payload: {e}"
213-
raise InvalidParameterValueException(msg) from e
214-
except ValueError as e:
215-
msg = f"Failed to decode base64 result: {e}"
216-
raise InvalidParameterValueException(msg) from e
202+
return request.body
217203

218204
def _parse_query_param(self, request: HTTPRequest, param_name: str) -> str | None:
219205
"""Parse a single query parameter from the request.

tests/web/handlers_test.py

Lines changed: 3 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -2039,13 +2039,13 @@ def test_send_durable_execution_callback_success_handler():
20392039
assert isinstance(route, CallbackSuccessRoute)
20402040
assert route.callback_id == "test-callback-id"
20412041

2042-
result_data = base64.b64encode(b"success-result").decode("utf-8")
2043-
request_body = json.dumps({"Result": result_data}).encode("utf-8")
2042+
# Result is sent as raw binary body
2043+
request_body = b"success-result"
20442044

20452045
request = HTTPRequest(
20462046
method="POST",
20472047
path=route,
2048-
headers={"Content-Type": "application/json"},
2048+
headers={},
20492049
query_params={},
20502050
body=request_body,
20512051
)
@@ -2062,57 +2062,6 @@ def test_send_durable_execution_callback_success_handler():
20622062
)
20632063

20642064

2065-
def test_send_durable_execution_callback_success_handler_invalid_json():
2066-
"""Test SendDurableExecutionCallbackSuccessHandler with invalid JSON."""
2067-
executor = Mock()
2068-
handler = SendDurableExecutionCallbackSuccessHandler(executor)
2069-
2070-
router = Router()
2071-
route = router.find_route(
2072-
"/2025-12-01/durable-execution-callbacks/test-callback-id/succeed", "POST"
2073-
)
2074-
2075-
request = HTTPRequest(
2076-
method="POST",
2077-
path=route,
2078-
headers={"Content-Type": "application/json"},
2079-
query_params={},
2080-
body=b"invalid-json",
2081-
)
2082-
2083-
response = handler.handle(route, request)
2084-
2085-
assert response.status_code == 400
2086-
assert response.body["Type"] == "InvalidParameterValueException"
2087-
assert "Failed to parse JSON payload" in response.body["message"]
2088-
2089-
2090-
def test_send_durable_execution_callback_success_handler_invalid_base64():
2091-
"""Test SendDurableExecutionCallbackSuccessHandler with invalid base64."""
2092-
executor = Mock()
2093-
handler = SendDurableExecutionCallbackSuccessHandler(executor)
2094-
2095-
router = Router()
2096-
route = router.find_route(
2097-
"/2025-12-01/durable-execution-callbacks/test-callback-id/succeed", "POST"
2098-
)
2099-
2100-
request_body = json.dumps({"Result": "invalid-base64!"}).encode("utf-8")
2101-
request = HTTPRequest(
2102-
method="POST",
2103-
path=route,
2104-
headers={"Content-Type": "application/json"},
2105-
query_params={},
2106-
body=request_body,
2107-
)
2108-
2109-
response = handler.handle(route, request)
2110-
2111-
assert response.status_code == 400
2112-
assert response.body["Type"] == "InvalidParameterValueException"
2113-
assert "Failed to decode base64 result" in response.body["message"]
2114-
2115-
21162065
def test_send_durable_execution_callback_success_handler_empty_body():
21172066
"""Test SendDurableExecutionCallbackSuccessHandler with empty body."""
21182067
executor = Mock()

0 commit comments

Comments
 (0)