diff --git a/litestar/_openapi/request_body.py b/litestar/_openapi/request_body.py index 2d9b446c2f..20480e2ce2 100644 --- a/litestar/_openapi/request_body.py +++ b/litestar/_openapi/request_body.py @@ -1,8 +1,9 @@ from __future__ import annotations -from typing import TYPE_CHECKING +from typing import TYPE_CHECKING, Mapping from litestar._openapi.schema_generation import SchemaCreator +from litestar._openapi.schema_generation.utils import get_formatted_examples from litestar.enums import RequestEncodingType from litestar.openapi.spec.media_type import OpenAPIMediaType from litestar.openapi.spec.request_body import RequestBody @@ -13,7 +14,7 @@ if TYPE_CHECKING: from litestar._openapi.datastructures import OpenAPIContext from litestar.dto import AbstractDTO - from litestar.openapi.spec import Example, Reference + from litestar.openapi.spec import Example from litestar.typing import FieldDefinition @@ -48,11 +49,8 @@ def create_request_body( else: schema = schema_creator.for_field_definition(data_field) - examples: dict[str, Example | Reference] | None = None - if isinstance(data_field.kwarg_definition, BodyKwarg) and data_field.kwarg_definition.examples: - examples = {} - for example in data_field.kwarg_definition.examples: - if isinstance(example.summary, str) and isinstance(example.value, dict): - examples[example.summary] = example + examples: Mapping[str, Example] | None = None + if isinstance(data_field.kwarg_definition, BodyKwarg) and isinstance(data_field.kwarg_definition.examples, list): + examples = get_formatted_examples(data_field, data_field.kwarg_definition.examples) return RequestBody(required=True, content={media_type: OpenAPIMediaType(schema=schema, examples=examples)}) diff --git a/litestar/openapi/spec/media_type.py b/litestar/openapi/spec/media_type.py index 3e83fb5e0a..dfc741ebc1 100644 --- a/litestar/openapi/spec/media_type.py +++ b/litestar/openapi/spec/media_type.py @@ -1,7 +1,7 @@ from __future__ import annotations from dataclasses import dataclass -from typing import TYPE_CHECKING, Any +from typing import TYPE_CHECKING, Any, Mapping from litestar.openapi.spec.base import BaseSchemaObject @@ -32,7 +32,7 @@ class OpenAPIMediaType(BaseSchemaObject): example provided by the schema. """ - examples: dict[str, Example | Reference] | None = None + examples: dict[str, Example | Reference] | Mapping[str, Example] | None = None """Examples of the media type. Each example object SHOULD match the media type and specified schema if present. diff --git a/tests/unit/test_openapi/test_request_body.py b/tests/unit/test_openapi/test_request_body.py index af439b7b2b..a7422ec573 100644 --- a/tests/unit/test_openapi/test_request_body.py +++ b/tests/unit/test_openapi/test_request_body.py @@ -157,5 +157,5 @@ async def handler( schema = app.openapi_schema.to_schema() assert schema["paths"]["/example"]["post"]["requestBody"]["content"]["application/json"]["examples"] == { - "example": {"summary": "example", "value": {"name": "John", "age": 30}} + "data-example-1": {"summary": "example", "value": {"name": "John", "age": 30}} }