2626 DEFAULT_OPENAPI_RESPONSE_DESCRIPTION ,
2727 DEFAULT_OPENAPI_TITLE ,
2828 DEFAULT_OPENAPI_VERSION ,
29+ DEFAULT_STATUS_CODE ,
2930)
3031from aws_lambda_powertools .event_handler .openapi .exceptions import (
3132 RequestUnsupportedContentType ,
@@ -283,7 +284,7 @@ class BedrockResponse(Generic[ResponseT]):
283284 def __init__ (
284285 self ,
285286 body : Any = None ,
286- status_code : int = 200 ,
287+ status_code : int = DEFAULT_STATUS_CODE ,
287288 content_type : str = DEFAULT_CONTENT_TYPE ,
288289 session_attributes : dict [str , Any ] | None = None ,
289290 prompt_session_attributes : dict [str , Any ] | None = None ,
@@ -387,6 +388,7 @@ def __init__(
387388 deprecated : bool = False ,
388389 enable_validation : bool | None = None ,
389390 custom_response_validation_http_code : HTTPStatus | None = None ,
391+ status_code : int = DEFAULT_STATUS_CODE ,
390392 middlewares : list [Callable [..., Response ]] | None = None ,
391393 ):
392394 """
@@ -432,6 +434,9 @@ def __init__(
432434 Enable or disable validation for this specific route. If None, inherits from resolver setting.
433435 custom_response_validation_http_code: int | HTTPStatus | None, optional
434436 Whether to have custom http status code for this route if response validation fails
437+ status_code: int
438+ The default HTTP status code for successful responses. Used in both the OpenAPI schema
439+ and the actual response when the handler returns a dict. Defaults to 200.
435440 middlewares: list[Callable[..., Response]] | None
436441 The list of route middlewares to be called in order.
437442 """
@@ -471,6 +476,7 @@ def __init__(
471476 self ._body_field : ModelField | None = None
472477
473478 self .custom_response_validation_http_code = custom_response_validation_http_code
479+ self .status_code = status_code
474480
475481 # Cache whether this route's handler declares Depends() parameters
476482 self ._has_dependencies : bool | None = None
@@ -664,6 +670,7 @@ def _get_openapi_path(
664670 response_description = self .response_description ,
665671 body_field = self .body_field ,
666672 custom_response_validation_http_code = self .custom_response_validation_http_code ,
673+ status_code = self .status_code ,
667674 dependant = dependant ,
668675 operation_ids = operation_ids ,
669676 model_name_map = model_name_map ,
@@ -820,6 +827,7 @@ def route(
820827 deprecated : bool = False ,
821828 enable_validation : bool | None = None ,
822829 custom_response_validation_http_code : int | HTTPStatus | None = None ,
830+ status_code : int = DEFAULT_STATUS_CODE ,
823831 middlewares : list [Callable [..., Any ]] | None = None ,
824832 ) -> Callable [[AnyCallableT ], AnyCallableT ]:
825833 raise NotImplementedError ()
@@ -883,6 +891,7 @@ def get(
883891 deprecated : bool = False ,
884892 enable_validation : bool | None = None ,
885893 custom_response_validation_http_code : int | HTTPStatus | None = None ,
894+ status_code : int = DEFAULT_STATUS_CODE ,
886895 middlewares : list [Callable [..., Any ]] | None = None ,
887896 ) -> Callable [[AnyCallableT ], AnyCallableT ]:
888897 """Get route decorator with GET `method`
@@ -925,6 +934,7 @@ def lambda_handler(event, context):
925934 deprecated ,
926935 enable_validation ,
927936 custom_response_validation_http_code ,
937+ status_code ,
928938 middlewares ,
929939 )
930940
@@ -946,6 +956,7 @@ def post(
946956 deprecated : bool = False ,
947957 enable_validation : bool | None = None ,
948958 custom_response_validation_http_code : int | HTTPStatus | None = None ,
959+ status_code : int = DEFAULT_STATUS_CODE ,
949960 middlewares : list [Callable [..., Any ]] | None = None ,
950961 ) -> Callable [[AnyCallableT ], AnyCallableT ]:
951962 """Post route decorator with POST `method`
@@ -989,6 +1000,7 @@ def lambda_handler(event, context):
9891000 deprecated ,
9901001 enable_validation ,
9911002 custom_response_validation_http_code ,
1003+ status_code ,
9921004 middlewares ,
9931005 )
9941006
@@ -1010,6 +1022,7 @@ def put(
10101022 deprecated : bool = False ,
10111023 enable_validation : bool | None = None ,
10121024 custom_response_validation_http_code : int | HTTPStatus | None = None ,
1025+ status_code : int = DEFAULT_STATUS_CODE ,
10131026 middlewares : list [Callable [..., Any ]] | None = None ,
10141027 ) -> Callable [[AnyCallableT ], AnyCallableT ]:
10151028 """Put route decorator with PUT `method`
@@ -1053,6 +1066,7 @@ def lambda_handler(event, context):
10531066 deprecated ,
10541067 enable_validation ,
10551068 custom_response_validation_http_code ,
1069+ status_code ,
10561070 middlewares ,
10571071 )
10581072
@@ -1074,6 +1088,7 @@ def delete(
10741088 deprecated : bool = False ,
10751089 enable_validation : bool | None = None ,
10761090 custom_response_validation_http_code : int | HTTPStatus | None = None ,
1091+ status_code : int = DEFAULT_STATUS_CODE ,
10771092 middlewares : list [Callable [..., Any ]] | None = None ,
10781093 ) -> Callable [[AnyCallableT ], AnyCallableT ]:
10791094 """Delete route decorator with DELETE `method`
@@ -1116,6 +1131,7 @@ def lambda_handler(event, context):
11161131 deprecated ,
11171132 enable_validation ,
11181133 custom_response_validation_http_code ,
1134+ status_code ,
11191135 middlewares ,
11201136 )
11211137
@@ -1137,6 +1153,7 @@ def patch(
11371153 deprecated : bool = False ,
11381154 enable_validation : bool | None = None ,
11391155 custom_response_validation_http_code : int | HTTPStatus | None = None ,
1156+ status_code : int = DEFAULT_STATUS_CODE ,
11401157 middlewares : list [Callable ] | None = None ,
11411158 ) -> Callable [[AnyCallableT ], AnyCallableT ]:
11421159 """Patch route decorator with PATCH `method`
@@ -1182,6 +1199,7 @@ def lambda_handler(event, context):
11821199 deprecated ,
11831200 enable_validation ,
11841201 custom_response_validation_http_code ,
1202+ status_code ,
11851203 middlewares ,
11861204 )
11871205
@@ -1203,6 +1221,7 @@ def head(
12031221 deprecated : bool = False ,
12041222 enable_validation : bool | None = None ,
12051223 custom_response_validation_http_code : int | HTTPStatus | None = None ,
1224+ status_code : int = DEFAULT_STATUS_CODE ,
12061225 middlewares : list [Callable ] | None = None ,
12071226 ) -> Callable [[AnyCallableT ], AnyCallableT ]:
12081227 """Head route decorator with HEAD `method`
@@ -1247,6 +1266,7 @@ def lambda_handler(event, context):
12471266 deprecated ,
12481267 enable_validation ,
12491268 custom_response_validation_http_code ,
1269+ status_code ,
12501270 middlewares ,
12511271 )
12521272
@@ -2357,6 +2377,7 @@ def route(
23572377 deprecated : bool = False ,
23582378 enable_validation : bool | None = None ,
23592379 custom_response_validation_http_code : int | HTTPStatus | None = None ,
2380+ status_code : int = DEFAULT_STATUS_CODE ,
23602381 middlewares : list [Callable [..., Any ]] | None = None ,
23612382 ) -> Callable [[AnyCallableT ], AnyCallableT ]:
23622383 """Route decorator includes parameter `method`"""
@@ -2392,6 +2413,7 @@ def register_resolver(func: AnyCallableT) -> AnyCallableT:
23922413 deprecated ,
23932414 enable_validation ,
23942415 custom_response_validation_http_code ,
2416+ status_code ,
23952417 middlewares ,
23962418 )
23972419
@@ -2779,12 +2801,15 @@ def _to_response(self, result: dict | tuple | Response | BedrockResponse) -> Res
27792801 - tuple[dict, int]: Same dict handling as above but with the option of including a status code
27802802 - Response: returned as is, and allows for more flexibility
27812803 """
2782- status_code = HTTPStatus .OK
27832804 if isinstance (result , (Response , BedrockResponse )):
27842805 return result
27852806 elif isinstance (result , tuple ) and len (result ) == 2 :
27862807 # Unpack result dict and status code from tuple
27872808 result , status_code = result
2809+ else :
2810+ # Use the route's status_code if available, otherwise default to 200
2811+ route : Route | None = self .context .get ("_route" )
2812+ status_code = route .status_code if route else HTTPStatus .OK
27882813
27892814 logger .debug ("Simple response detected, serializing return before constructing final response" )
27902815 return Response (
@@ -2903,6 +2928,7 @@ def route(
29032928 deprecated : bool = False ,
29042929 enable_validation : bool | None = None ,
29052930 custom_response_validation_http_code : int | HTTPStatus | None = None ,
2931+ status_code : int = DEFAULT_STATUS_CODE ,
29062932 middlewares : list [Callable [..., Any ]] | None = None ,
29072933 ) -> Callable [[AnyCallableT ], AnyCallableT ]:
29082934 def register_route (func : AnyCallableT ) -> AnyCallableT :
@@ -2931,6 +2957,7 @@ def register_route(func: AnyCallableT) -> AnyCallableT:
29312957 deprecated ,
29322958 enable_validation ,
29332959 custom_response_validation_http_code ,
2960+ status_code ,
29342961 )
29352962
29362963 # Collate Middleware for routes
@@ -3000,6 +3027,7 @@ def route(
30003027 deprecated : bool = False ,
30013028 enable_validation : bool | None = None ,
30023029 custom_response_validation_http_code : int | HTTPStatus | None = None ,
3030+ status_code : int = DEFAULT_STATUS_CODE ,
30033031 middlewares : list [Callable [..., Any ]] | None = None ,
30043032 ) -> Callable [[AnyCallableT ], AnyCallableT ]:
30053033 # NOTE: see #1552 for more context.
@@ -3021,6 +3049,7 @@ def route(
30213049 deprecated ,
30223050 enable_validation ,
30233051 custom_response_validation_http_code ,
3052+ status_code ,
30243053 middlewares ,
30253054 )
30263055
0 commit comments