diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractPythonCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractPythonCodegen.java index c8c76e39469..e7740fe2513 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractPythonCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractPythonCodegen.java @@ -2024,7 +2024,8 @@ public abstract class AbstractPythonCodegen extends DefaultCodegen implements Co } private PythonType uuidType(IJsonSchemaValidationProperties cp) { - return new PythonType(cp.getDataType()); + moduleImports.add("uuid", "UUID"); + return new PythonType("UUID"); } private PythonType modelType(IJsonSchemaValidationProperties cp) { @@ -2051,6 +2052,8 @@ public abstract class AbstractPythonCodegen extends DefaultCodegen implements Co return arrayType(cp); } else if (cp.getIsMap() || cp.getIsFreeFormObject()) { return mapType(cp); + } else if (cp.getIsUuid()) { + return uuidType(cp); } else if (cp.getIsString()) { return stringType(cp); } else if (cp.getIsNumber() || cp.getIsFloat() || cp.getIsDouble()) { @@ -2067,8 +2070,6 @@ public abstract class AbstractPythonCodegen extends DefaultCodegen implements Co return anyType(cp); } else if (cp.getIsDate() || cp.getIsDateTime()) { return dateType(cp); - } else if (cp.getIsUuid()) { - return uuidType(cp); } return null; diff --git a/modules/openapi-generator/src/main/resources/python/api_client.mustache b/modules/openapi-generator/src/main/resources/python/api_client.mustache index 1f9c4d70062..f3c27f2b8f1 100644 --- a/modules/openapi-generator/src/main/resources/python/api_client.mustache +++ b/modules/openapi-generator/src/main/resources/python/api_client.mustache @@ -12,6 +12,7 @@ import mimetypes import os import re import tempfile +import uuid from urllib.parse import quote from typing import Tuple, Optional, List, Dict, Union @@ -365,6 +366,8 @@ class ApiClient: return obj.get_secret_value() elif isinstance(obj, self.PRIMITIVE_TYPES): return obj + elif isinstance(obj, uuid.UUID): + return str(obj) elif isinstance(obj, list): return [ self.sanitize_for_serialization(sub_obj) for sub_obj in obj diff --git a/samples/client/echo_api/python-disallowAdditionalPropertiesIfNotPresent/openapi_client/api_client.py b/samples/client/echo_api/python-disallowAdditionalPropertiesIfNotPresent/openapi_client/api_client.py index b7b2434f629..513b1d158a3 100644 --- a/samples/client/echo_api/python-disallowAdditionalPropertiesIfNotPresent/openapi_client/api_client.py +++ b/samples/client/echo_api/python-disallowAdditionalPropertiesIfNotPresent/openapi_client/api_client.py @@ -22,6 +22,7 @@ import mimetypes import os import re import tempfile +import uuid from urllib.parse import quote from typing import Tuple, Optional, List, Dict, Union @@ -357,6 +358,8 @@ class ApiClient: return obj.get_secret_value() elif isinstance(obj, self.PRIMITIVE_TYPES): return obj + elif isinstance(obj, uuid.UUID): + return str(obj) elif isinstance(obj, list): return [ self.sanitize_for_serialization(sub_obj) for sub_obj in obj diff --git a/samples/client/echo_api/python/openapi_client/api_client.py b/samples/client/echo_api/python/openapi_client/api_client.py index b7b2434f629..513b1d158a3 100644 --- a/samples/client/echo_api/python/openapi_client/api_client.py +++ b/samples/client/echo_api/python/openapi_client/api_client.py @@ -22,6 +22,7 @@ import mimetypes import os import re import tempfile +import uuid from urllib.parse import quote from typing import Tuple, Optional, List, Dict, Union @@ -357,6 +358,8 @@ class ApiClient: return obj.get_secret_value() elif isinstance(obj, self.PRIMITIVE_TYPES): return obj + elif isinstance(obj, uuid.UUID): + return str(obj) elif isinstance(obj, list): return [ self.sanitize_for_serialization(sub_obj) for sub_obj in obj diff --git a/samples/openapi3/client/petstore/python-aiohttp/petstore_api/api/fake_api.py b/samples/openapi3/client/petstore/python-aiohttp/petstore_api/api/fake_api.py index ff7f136569f..bafaa8698d6 100644 --- a/samples/openapi3/client/petstore/python-aiohttp/petstore_api/api/fake_api.py +++ b/samples/openapi3/client/petstore/python-aiohttp/petstore_api/api/fake_api.py @@ -20,6 +20,7 @@ from datetime import date, datetime from pydantic import Field, StrictBool, StrictBytes, StrictInt, StrictStr, field_validator from typing import Any, Dict, List, Optional, Tuple, Union from typing_extensions import Annotated +from uuid import UUID from petstore_api.models.client import Client from petstore_api.models.enum_class import EnumClass from petstore_api.models.file_schema_test_class import FileSchemaTestClass @@ -4913,7 +4914,7 @@ class FakeApi: @validate_call async def fake_uuid_example( self, - uuid_example: Annotated[StrictStr, Field(description="uuid example")], + uuid_example: Annotated[UUID, Field(description="uuid example")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -4979,7 +4980,7 @@ class FakeApi: @validate_call async def fake_uuid_example_with_http_info( self, - uuid_example: Annotated[StrictStr, Field(description="uuid example")], + uuid_example: Annotated[UUID, Field(description="uuid example")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -5045,7 +5046,7 @@ class FakeApi: @validate_call async def fake_uuid_example_without_preload_content( self, - uuid_example: Annotated[StrictStr, Field(description="uuid example")], + uuid_example: Annotated[UUID, Field(description="uuid example")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], diff --git a/samples/openapi3/client/petstore/python-aiohttp/petstore_api/api_client.py b/samples/openapi3/client/petstore/python-aiohttp/petstore_api/api_client.py index 928c3696c2a..7ce51c480c2 100644 --- a/samples/openapi3/client/petstore/python-aiohttp/petstore_api/api_client.py +++ b/samples/openapi3/client/petstore/python-aiohttp/petstore_api/api_client.py @@ -21,6 +21,7 @@ import mimetypes import os import re import tempfile +import uuid from urllib.parse import quote from typing import Tuple, Optional, List, Dict, Union @@ -359,6 +360,8 @@ class ApiClient: return obj.get_secret_value() elif isinstance(obj, self.PRIMITIVE_TYPES): return obj + elif isinstance(obj, uuid.UUID): + return str(obj) elif isinstance(obj, list): return [ self.sanitize_for_serialization(sub_obj) for sub_obj in obj diff --git a/samples/openapi3/client/petstore/python-aiohttp/petstore_api/models/format_test.py b/samples/openapi3/client/petstore/python-aiohttp/petstore_api/models/format_test.py index bb3a58acc52..8d70a96f3a7 100644 --- a/samples/openapi3/client/petstore/python-aiohttp/petstore_api/models/format_test.py +++ b/samples/openapi3/client/petstore/python-aiohttp/petstore_api/models/format_test.py @@ -22,6 +22,7 @@ from decimal import Decimal from pydantic import BaseModel, ConfigDict, Field, StrictBytes, StrictInt, StrictStr, field_validator from typing import Any, ClassVar, Dict, List, Optional, Tuple, Union from typing_extensions import Annotated +from uuid import UUID from typing import Optional, Set from typing_extensions import Self @@ -42,7 +43,7 @@ class FormatTest(BaseModel): binary: Optional[Union[StrictBytes, StrictStr, Tuple[StrictStr, StrictBytes]]] = None var_date: date = Field(alias="date") date_time: Optional[datetime] = Field(default=None, alias="dateTime") - uuid: Optional[StrictStr] = None + uuid: Optional[UUID] = None password: Annotated[str, Field(min_length=10, strict=True, max_length=64)] pattern_with_digits: Optional[Annotated[str, Field(strict=True)]] = Field(default=None, description="A string that is a 10 digit number. Can have leading zeros.") pattern_with_digits_and_delimiter: Optional[Annotated[str, Field(strict=True)]] = Field(default=None, description="A string starting with 'image_' (case insensitive) and one to three digits following i.e. Image_01.") diff --git a/samples/openapi3/client/petstore/python-aiohttp/petstore_api/models/mixed_properties_and_additional_properties_class.py b/samples/openapi3/client/petstore/python-aiohttp/petstore_api/models/mixed_properties_and_additional_properties_class.py index 5e28a547c67..46998dfb5c6 100644 --- a/samples/openapi3/client/petstore/python-aiohttp/petstore_api/models/mixed_properties_and_additional_properties_class.py +++ b/samples/openapi3/client/petstore/python-aiohttp/petstore_api/models/mixed_properties_and_additional_properties_class.py @@ -18,8 +18,9 @@ import re # noqa: F401 import json from datetime import datetime -from pydantic import BaseModel, ConfigDict, Field, StrictStr +from pydantic import BaseModel, ConfigDict, Field from typing import Any, ClassVar, Dict, List, Optional +from uuid import UUID from petstore_api.models.animal import Animal from typing import Optional, Set from typing_extensions import Self @@ -28,7 +29,7 @@ class MixedPropertiesAndAdditionalPropertiesClass(BaseModel): """ MixedPropertiesAndAdditionalPropertiesClass """ # noqa: E501 - uuid: Optional[StrictStr] = None + uuid: Optional[UUID] = None date_time: Optional[datetime] = Field(default=None, alias="dateTime") map: Optional[Dict[str, Animal]] = None __properties: ClassVar[List[str]] = ["uuid", "dateTime", "map"] diff --git a/samples/openapi3/client/petstore/python-aiohttp/petstore_api/models/task.py b/samples/openapi3/client/petstore/python-aiohttp/petstore_api/models/task.py index 94ac783bca7..312b2c8ee47 100644 --- a/samples/openapi3/client/petstore/python-aiohttp/petstore_api/models/task.py +++ b/samples/openapi3/client/petstore/python-aiohttp/petstore_api/models/task.py @@ -17,8 +17,9 @@ import pprint import re # noqa: F401 import json -from pydantic import BaseModel, ConfigDict, StrictStr +from pydantic import BaseModel, ConfigDict from typing import Any, ClassVar, Dict, List +from uuid import UUID from petstore_api.models.task_activity import TaskActivity from typing import Optional, Set from typing_extensions import Self @@ -27,7 +28,7 @@ class Task(BaseModel): """ Used to test oneOf enums with only one string value. """ # noqa: E501 - id: StrictStr + id: UUID activity: TaskActivity __properties: ClassVar[List[str]] = ["id", "activity"] diff --git a/samples/openapi3/client/petstore/python/petstore_api/api/fake_api.py b/samples/openapi3/client/petstore/python/petstore_api/api/fake_api.py index 78d16e5f504..c3eb9df6439 100755 --- a/samples/openapi3/client/petstore/python/petstore_api/api/fake_api.py +++ b/samples/openapi3/client/petstore/python/petstore_api/api/fake_api.py @@ -20,6 +20,7 @@ from datetime import date, datetime from pydantic import Field, StrictBool, StrictBytes, StrictFloat, StrictInt, StrictStr, field_validator from typing import Any, Dict, List, Optional, Tuple, Union from typing_extensions import Annotated +from uuid import UUID from petstore_api.models.client import Client from petstore_api.models.enum_class import EnumClass from petstore_api.models.file_schema_test_class import FileSchemaTestClass @@ -4913,7 +4914,7 @@ class FakeApi: @validate_call def fake_uuid_example( self, - uuid_example: Annotated[StrictStr, Field(description="uuid example")], + uuid_example: Annotated[UUID, Field(description="uuid example")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -4979,7 +4980,7 @@ class FakeApi: @validate_call def fake_uuid_example_with_http_info( self, - uuid_example: Annotated[StrictStr, Field(description="uuid example")], + uuid_example: Annotated[UUID, Field(description="uuid example")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -5045,7 +5046,7 @@ class FakeApi: @validate_call def fake_uuid_example_without_preload_content( self, - uuid_example: Annotated[StrictStr, Field(description="uuid example")], + uuid_example: Annotated[UUID, Field(description="uuid example")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], diff --git a/samples/openapi3/client/petstore/python/petstore_api/api_client.py b/samples/openapi3/client/petstore/python/petstore_api/api_client.py index 660f2fd2c16..33d7dde63b8 100755 --- a/samples/openapi3/client/petstore/python/petstore_api/api_client.py +++ b/samples/openapi3/client/petstore/python/petstore_api/api_client.py @@ -21,6 +21,7 @@ import mimetypes import os import re import tempfile +import uuid from urllib.parse import quote from typing import Tuple, Optional, List, Dict, Union @@ -356,6 +357,8 @@ class ApiClient: return obj.get_secret_value() elif isinstance(obj, self.PRIMITIVE_TYPES): return obj + elif isinstance(obj, uuid.UUID): + return str(obj) elif isinstance(obj, list): return [ self.sanitize_for_serialization(sub_obj) for sub_obj in obj diff --git a/samples/openapi3/client/petstore/python/petstore_api/models/format_test.py b/samples/openapi3/client/petstore/python/petstore_api/models/format_test.py index d0de1bc6b61..4aca97f91c4 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/models/format_test.py +++ b/samples/openapi3/client/petstore/python/petstore_api/models/format_test.py @@ -22,6 +22,7 @@ from decimal import Decimal from pydantic import BaseModel, ConfigDict, Field, StrictBytes, StrictInt, StrictStr, field_validator from typing import Any, ClassVar, Dict, List, Optional, Tuple, Union from typing_extensions import Annotated +from uuid import UUID from typing import Optional, Set from typing_extensions import Self @@ -42,7 +43,7 @@ class FormatTest(BaseModel): binary: Optional[Union[StrictBytes, StrictStr, Tuple[StrictStr, StrictBytes]]] = None var_date: date = Field(alias="date") date_time: Optional[datetime] = Field(default=None, alias="dateTime") - uuid: Optional[StrictStr] = None + uuid: Optional[UUID] = None password: Annotated[str, Field(min_length=10, strict=True, max_length=64)] pattern_with_digits: Optional[Annotated[str, Field(strict=True)]] = Field(default=None, description="A string that is a 10 digit number. Can have leading zeros.") pattern_with_digits_and_delimiter: Optional[Annotated[str, Field(strict=True)]] = Field(default=None, description="A string starting with 'image_' (case insensitive) and one to three digits following i.e. Image_01.") diff --git a/samples/openapi3/client/petstore/python/petstore_api/models/mixed_properties_and_additional_properties_class.py b/samples/openapi3/client/petstore/python/petstore_api/models/mixed_properties_and_additional_properties_class.py index be56ba40f72..c21f442bb79 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/models/mixed_properties_and_additional_properties_class.py +++ b/samples/openapi3/client/petstore/python/petstore_api/models/mixed_properties_and_additional_properties_class.py @@ -18,8 +18,9 @@ import re # noqa: F401 import json from datetime import datetime -from pydantic import BaseModel, ConfigDict, Field, StrictStr +from pydantic import BaseModel, ConfigDict, Field from typing import Any, ClassVar, Dict, List, Optional +from uuid import UUID from petstore_api.models.animal import Animal from typing import Optional, Set from typing_extensions import Self @@ -28,7 +29,7 @@ class MixedPropertiesAndAdditionalPropertiesClass(BaseModel): """ MixedPropertiesAndAdditionalPropertiesClass """ # noqa: E501 - uuid: Optional[StrictStr] = None + uuid: Optional[UUID] = None date_time: Optional[datetime] = Field(default=None, alias="dateTime") map: Optional[Dict[str, Animal]] = None additional_properties: Dict[str, Any] = {} diff --git a/samples/openapi3/client/petstore/python/petstore_api/models/task.py b/samples/openapi3/client/petstore/python/petstore_api/models/task.py index 42bbd733b00..a8e0fa11ff8 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/models/task.py +++ b/samples/openapi3/client/petstore/python/petstore_api/models/task.py @@ -17,8 +17,9 @@ import pprint import re # noqa: F401 import json -from pydantic import BaseModel, ConfigDict, StrictStr +from pydantic import BaseModel, ConfigDict from typing import Any, ClassVar, Dict, List +from uuid import UUID from petstore_api.models.task_activity import TaskActivity from typing import Optional, Set from typing_extensions import Self @@ -27,7 +28,7 @@ class Task(BaseModel): """ Used to test oneOf enums with only one string value. """ # noqa: E501 - id: StrictStr + id: UUID activity: TaskActivity additional_properties: Dict[str, Any] = {} __properties: ClassVar[List[str]] = ["id", "activity"]