Description
Use case
I have an api gateway resolver with numerous routes and validation enabled. For route "/a" the default if the response cannot be validated against the route's function's annotation would be a 422
response. I want route "/b" however, to return a 500
if its response could not be validated and route "/c" to return a 403
.
Solution/User Experience
from pydantic import BaseModel
from aws_lambda_powertools.event_handler import APIGatewayRestResolver
app = APIGatewayRestResolver(enable_validation=True)
class Model(BaseModel):
name: str
age: int
@app.get("/a")
def handler_route_a() -> Model:
return {"age": 18} # type: ignore
@app.get(
"/b",
custom_response_validation_http_code=500,
)
def handler_route_b() -> Model:
return {"age": 18} # type: ignore
@app.get(
"/c",
custom_response_validation_http_code=403,
)
def handler_route_c() -> Model:
return {"age": 18} # type: ignore
event_a = {
"path": "/a",
"httpMethod": "GET",
}
event_b = {
"path": "/b",
"httpMethod": "GET",
}
event_c = {
"path": "/c",
"httpMethod": "GET",
}
result_a = app(event_a, {})
result_b = app(event_b, {})
result_c = app(event_c, {})
assert result_a["statusCode"] == 422
assert result_b["statusCode"] == 500
assert result_c["statusCode"] == 403
Alternative solutions
Acknowledgment
- This feature request meets Powertools for AWS Lambda (Python) Tenets
- Should this be considered in other Powertools for AWS Lambda languages? i.e. Java, TypeScript, and .NET
Metadata
Metadata
Assignees
Labels
Type
Projects
Status
Shipped