8000 Feature request: Custom response validation status code on routes · Issue #6245 · aws-powertools/powertools-lambda-python · GitHub
[go: up one dir, main page]

Skip to content
Feature request: Custom response validation status code on routes #6245
@amin-farjadi

Description

@amin-farjadi

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

Metadata

Metadata

Assignees

Projects

Status

Shipped

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions

    0