From 86e29121be5481ad69de5cade3116073b8c42b3f Mon Sep 17 00:00:00 2001 From: sherbang Date: Mon, 8 Jul 2024 10:06:47 -0400 Subject: [PATCH] fix(OpenAPI): Correctly handle Annotated NewType (#3615) --- litestar/_openapi/schema_generation/schema.py | 2 +- tests/unit/test_openapi/test_parameters.py | 20 +++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/litestar/_openapi/schema_generation/schema.py b/litestar/_openapi/schema_generation/schema.py index d30823333a..f3ec35a4f0 100644 --- a/litestar/_openapi/schema_generation/schema.py +++ b/litestar/_openapi/schema_generation/schema.py @@ -360,7 +360,7 @@ def for_field_definition(self, field_definition: FieldDefinition) -> Schema | Re def for_new_type(self, field_definition: FieldDefinition) -> Schema | Reference: return self.for_field_definition( FieldDefinition.from_kwarg( - annotation=unwrap_new_type(field_definition.raw), + annotation=unwrap_new_type(field_definition.annotation), name=field_definition.name, default=field_definition.default, ) diff --git a/tests/unit/test_openapi/test_parameters.py b/tests/unit/test_openapi/test_parameters.py index b99e858264..08505d0672 100644 --- a/tests/unit/test_openapi/test_parameters.py +++ b/tests/unit/test_openapi/test_parameters.py @@ -1,3 +1,4 @@ +import dataclasses from typing import TYPE_CHECKING, Any, List, Optional, Type, cast from uuid import UUID @@ -418,3 +419,22 @@ async def handler( app = Litestar([handler]) assert app.openapi_schema.paths["/"].get.parameters[0].schema.type == OpenAPIType.STRING # type: ignore[index, union-attr] + + +def test_unwrap_annotated_new_type() -> None: + FancyString = NewType("FancyString", str) + + @dataclasses.dataclass + class TestModel: + param: Annotated[FancyString, "foo"] + + @get("/") + async def handler( + param: TestModel, + ) -> None: + return None + + app = Litestar([handler]) + + testmodel_schema_name = app.openapi_schema.paths["/"].get.parameters[0].schema.value # type: ignore[index, union-attr] + assert app.openapi_schema.components.schemas[testmodel_schema_name].properties["param"].type == OpenAPIType.STRING # type: ignore[index, union-attr]