diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PythonFastAPIServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PythonFastAPIServerCodegen.java index 76c13906f070..76e029f3c56e 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PythonFastAPIServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PythonFastAPIServerCodegen.java @@ -253,7 +253,9 @@ public OperationsMap postProcessOperationsWithModels(OperationsMap objs, List postProcessAllModels(Map objs) { Map result = super.postProcessAllModels(objs); for (Map.Entry entry : result.entrySet()) { - for (ModelMap mo : entry.getValue().getModels()) { + ModelsMap models = entry.getValue(); + postProcessModelsEnum(models); + for (ModelMap mo : models.getModels()) { CodegenModel cm = mo.getModel(); // Add additional filename information for imports mo.put("pyImports", toPyImports(cm, cm.imports)); diff --git a/modules/openapi-generator/src/main/resources/python-fastapi/model.mustache b/modules/openapi-generator/src/main/resources/python-fastapi/model.mustache index 3be022b17e32..29d692d34b15 100644 --- a/modules/openapi-generator/src/main/resources/python-fastapi/model.mustache +++ b/modules/openapi-generator/src/main/resources/python-fastapi/model.mustache @@ -4,6 +4,13 @@ from __future__ import annotations from datetime import date, datetime # noqa: F401 import re # noqa: F401 +{{#models}} + {{#model}} + {{#isEnum}} +from enum import Enum # noqa: F401 + {{/isEnum}} + {{/model}} +{{/models}} from typing import Any, Dict, List, Optional # noqa: F401 from pydantic import AnyUrl, BaseModel, EmailStr, Field, validator # noqa: F401 @@ -18,6 +25,21 @@ from pydantic import AnyUrl, BaseModel, EmailStr, Field, validator # noqa: F401 {{#models}} {{#model}} +{{#isEnum}} +class {{classname}}(str, Enum): + """NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + + Do not edit the class manually. + + """ +{{#allowableValues}} + {{#enumVars}} + {{name}} = {{{value}}} + {{/enumVars}} +{{/allowableValues}} + +{{/isEnum}} +{{^isEnum}} class {{classname}}(BaseModel): """NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -70,7 +92,15 @@ class {{classname}}(BaseModel): return value {{/pattern}} {{/vars}} +{{/isEnum}} {{/model}} {{/models}} + +{{#models}} + {{#model}} + {{^isEnum}} {{classname}}.update_forward_refs() + {{/isEnum}} + {{/model}} +{{/models}} diff --git a/samples/server/petstore/python-fastapi/src/openapi_server/models/api_response.py b/samples/server/petstore/python-fastapi/src/openapi_server/models/api_response.py index 7840e693d734..94dd5f8bb1ed 100644 --- a/samples/server/petstore/python-fastapi/src/openapi_server/models/api_response.py +++ b/samples/server/petstore/python-fastapi/src/openapi_server/models/api_response.py @@ -25,4 +25,5 @@ class ApiResponse(BaseModel): type: Optional[str] = Field(alias="type", default=None) message: Optional[str] = Field(alias="message", default=None) + ApiResponse.update_forward_refs() diff --git a/samples/server/petstore/python-fastapi/src/openapi_server/models/category.py b/samples/server/petstore/python-fastapi/src/openapi_server/models/category.py index c63704e22340..7b2fd0bde684 100644 --- a/samples/server/petstore/python-fastapi/src/openapi_server/models/category.py +++ b/samples/server/petstore/python-fastapi/src/openapi_server/models/category.py @@ -28,4 +28,5 @@ def name_pattern(cls, value): assert value is not None and re.match(r"^[a-zA-Z0-9]+[a-zA-Z0-9\.\-_]*[a-zA-Z0-9]+$", value) return value + Category.update_forward_refs() diff --git a/samples/server/petstore/python-fastapi/src/openapi_server/models/order.py b/samples/server/petstore/python-fastapi/src/openapi_server/models/order.py index 95d532c51560..38e2449f1d0e 100644 --- a/samples/server/petstore/python-fastapi/src/openapi_server/models/order.py +++ b/samples/server/petstore/python-fastapi/src/openapi_server/models/order.py @@ -31,4 +31,5 @@ class Order(BaseModel): status: Optional[str] = Field(alias="status", default=None) complete: Optional[bool] = Field(alias="complete", default=None) + Order.update_forward_refs() diff --git a/samples/server/petstore/python-fastapi/src/openapi_server/models/pet.py b/samples/server/petstore/python-fastapi/src/openapi_server/models/pet.py index d814c3ce2a0c..0a2f0a938ed6 100644 --- a/samples/server/petstore/python-fastapi/src/openapi_server/models/pet.py +++ b/samples/server/petstore/python-fastapi/src/openapi_server/models/pet.py @@ -33,4 +33,5 @@ class Pet(BaseModel): tags: Optional[List[Tag]] = Field(alias="tags", default=None) status: Optional[str] = Field(alias="status", default=None) + Pet.update_forward_refs() diff --git a/samples/server/petstore/python-fastapi/src/openapi_server/models/tag.py b/samples/server/petstore/python-fastapi/src/openapi_server/models/tag.py index b12929adea72..c3a853e49c53 100644 --- a/samples/server/petstore/python-fastapi/src/openapi_server/models/tag.py +++ b/samples/server/petstore/python-fastapi/src/openapi_server/models/tag.py @@ -23,4 +23,5 @@ class Tag(BaseModel): id: Optional[int] = Field(alias="id", default=None) name: Optional[str] = Field(alias="name", default=None) + Tag.update_forward_refs() diff --git a/samples/server/petstore/python-fastapi/src/openapi_server/models/user.py b/samples/server/petstore/python-fastapi/src/openapi_server/models/user.py index 3cb036759f27..09e652c350b8 100644 --- a/samples/server/petstore/python-fastapi/src/openapi_server/models/user.py +++ b/samples/server/petstore/python-fastapi/src/openapi_server/models/user.py @@ -35,4 +35,5 @@ class User(BaseModel): phone: Optional[str] = Field(alias="phone", default=None) user_status: Optional[int] = Field(alias="userStatus", default=None) + User.update_forward_refs()