Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature request: Custom response validation status code on routes #6245

Open
2 tasks done
amin-farjadi opened this issue Mar 10, 2025 · 0 comments
Open
2 tasks done
Labels
feature-request feature request triage Pending triage from maintainers

Comments

@amin-farjadi
Copy link

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feature-request feature request triage Pending triage from maintainers
Projects
Development

No branches or pull requests

1 participant