Skip to content

Commit 6424392

Browse files
committed
Allow values other than strings in the examples of the Parameter Object
1 parent f3c3b8e commit 6424392

File tree

2 files changed

+39
-7
lines changed

2 files changed

+39
-7
lines changed

Diff for: aws_lambda_powertools/event_handler/openapi/models.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ class Schema(BaseModel):
201201
deprecated: Optional[bool] = None
202202
readOnly: Optional[bool] = None
203203
writeOnly: Optional[bool] = None
204-
examples: Optional[Union[List["Example"], List[str]]] = None
204+
examples: Optional[List[Any]] = None
205205
# Ref: OpenAPI 3.0.0: https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.0.md#schema-object
206206
# Schema Object
207207
discriminator: Optional[Discriminator] = None

Diff for: tests/functional/event_handler/_pydantic/test_openapi_params.py

+38-6
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from dataclasses import dataclass
22
from datetime import datetime
3-
from typing import List
3+
from typing import List, Optional
44

55
from pydantic import BaseModel
66
from typing_extensions import Annotated
@@ -105,7 +105,7 @@ def test_openapi_with_custom_params():
105105
def handler(
106106
count: Annotated[
107107
int,
108-
Query(gt=0, lt=100, examples=[Example(summary="Example 1", value=10)]),
108+
Query(gt=0, lt=100, examples=[10]),
109109
] = 1,
110110
):
111111
print(count)
@@ -130,8 +130,7 @@ def handler(
130130
assert parameter.schema_.exclusiveMinimum == 0
131131
assert parameter.schema_.exclusiveMaximum == 100
132132
assert len(parameter.schema_.examples) == 1
133-
assert parameter.schema_.examples[0].summary == "Example 1"
134-
assert parameter.schema_.examples[0].value == 10
133+
assert parameter.schema_.examples[0] == 10
135134

136135

137136
def test_openapi_with_scalar_returns():
@@ -469,16 +468,26 @@ def test_openapi_with_example_as_list():
469468
def handler(
470469
count: Annotated[
471470
int,
472-
Query(gt=0, lt=100, examples=["Example 1"]),
471+
Query(gt=0, lt=100, examples=[10]),
473472
] = 1,
473+
name: Annotated[
474+
Optional[str],
475+
Query(examples=["Example 1"]),
476+
] = None,
477+
include_extra: Annotated[
478+
bool,
479+
Query(examples=[True]),
480+
] = False,
474481
):
475482
print(count)
483+
print(name)
484+
print(include_extra)
476485
raise NotImplementedError()
477486

478487
schema = app.get_openapi_schema()
479488

480489
get = schema.paths["/users"].get
481-
assert len(get.parameters) == 1
490+
assert len(get.parameters) == 3
482491
assert get.summary == "Get Users"
483492
assert get.operationId == "GetUsers"
484493
assert get.description == "Get paginated users"
@@ -494,4 +503,27 @@ def handler(
494503
assert parameter.schema_.exclusiveMinimum == 0
495504
assert parameter.schema_.exclusiveMaximum == 100
496505
assert len(parameter.schema_.examples) == 1
506+
assert parameter.schema_.examples[0] == 10
507+
508+
parameter = get.parameters[1]
509+
assert isinstance(parameter, Parameter)
510+
assert parameter.in_ == ParameterInType.query
511+
assert parameter.name == "name"
512+
assert parameter.required is False
513+
assert parameter.schema_.default is None
514+
assert len(parameter.schema_.anyOf) == 2
515+
assert {i.type for i in parameter.schema_.anyOf} == {"string", "null"}
516+
assert parameter.schema_.title == "Name"
517+
assert len(parameter.schema_.examples) == 1
497518
assert parameter.schema_.examples[0] == "Example 1"
519+
520+
parameter = get.parameters[2]
521+
assert isinstance(parameter, Parameter)
522+
assert parameter.in_ == ParameterInType.query
523+
assert parameter.name == "include_extra"
524+
assert parameter.required is False
525+
assert parameter.schema_.default is False
526+
assert parameter.schema_.type == "boolean"
527+
assert parameter.schema_.title == "Include Extra"
528+
assert len(parameter.schema_.examples) == 1
529+
assert parameter.schema_.examples[0] is True

0 commit comments

Comments
 (0)