Skip to content

Commit a52995c

Browse files
committed
fix(event_handler): preserve openapi_examples on Body
1 parent 1041188 commit a52995c

File tree

3 files changed

+45
-0
lines changed

3 files changed

+45
-0
lines changed

aws_lambda_powertools/event_handler/api_gateway.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -826,6 +826,8 @@ def _openapi_operation_request_body(
826826

827827
# Generate the request body media type
828828
request_media_content: dict[str, Any] = {"schema": body_schema}
829+
if field_info.openapi_examples:
830+
request_media_content["examples"] = field_info.openapi_examples
829831
request_body_oai["content"] = {request_media_type: request_media_content}
830832
return request_body_oai
831833

aws_lambda_powertools/event_handler/openapi/params.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -716,8 +716,12 @@ def __init__(
716716
)
717717
if examples is not None:
718718
kwargs["examples"] = examples
719+
if openapi_examples is not None:
720+
kwargs["openapi_examples"] = openapi_examples
719721
current_json_schema_extra = json_schema_extra or extra
720722

723+
self.openapi_examples = openapi_examples
724+
721725
kwargs.update(
722726
{
723727
"annotation": annotation,

tests/functional/event_handler/_pydantic/test_openapi_params.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -567,6 +567,45 @@ def handler(user: Annotated[User, Body(description="This is a user")]):
567567
assert request_body.content[JSON_CONTENT_TYPE].schema_.description == "This is a user"
568568

569569

570+
def test_openapi_with_body_examples():
571+
app = APIGatewayRestResolver()
572+
573+
first_example = Example(summary="Example1", description="Example1", value={"name": "Alice"})
574+
second_example = Example(summary="Example2", description="Example2", value={"name": "Bob"})
575+
576+
class User(BaseModel):
577+
name: str
578+
579+
@app.post("/users")
580+
def handler(
581+
user: Annotated[
582+
User,
583+
Body(
584+
openapi_examples={
585+
"example1": first_example,
586+
"example2": second_example,
587+
},
588+
),
589+
],
590+
):
591+
print(user)
592+
593+
schema = app.get_openapi_schema()
594+
assert len(schema.paths.keys()) == 1
595+
596+
post = schema.paths["/users"].post
597+
assert post.parameters is None
598+
assert post.requestBody is not None
599+
600+
request_body = post.requestBody
601+
602+
# Examples should appear in the request_body content schema
603+
request_body_examples = request_body.content[JSON_CONTENT_TYPE].examples
604+
605+
assert request_body_examples["example1"] == first_example
606+
assert request_body_examples["example2"] == second_example
607+
608+
570609
def test_openapi_with_deprecated_operations():
571610
app = APIGatewayRestResolver()
572611

0 commit comments

Comments
 (0)