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 c8c76e394692..e7740fe25137 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 @@ private PythonType dateType(IJsonSchemaValidationProperties cp) { } 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 @@ private PythonType fromCommon(IJsonSchemaValidationProperties cp) { 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 @@ private PythonType fromCommon(IJsonSchemaValidationProperties cp) { 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 1f9c4d70062a..f3c27f2b8f1e 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 b7b2434f629c..513b1d158a35 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 os import re import tempfile +import uuid from urllib.parse import quote from typing import Tuple, Optional, List, Dict, Union @@ -357,6 +358,8 @@ def sanitize_for_serialization(self, obj): 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 b7b2434f629c..513b1d158a35 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 os import re import tempfile +import uuid from urllib.parse import quote from typing import Tuple, Optional, List, Dict, Union @@ -357,6 +358,8 @@ def sanitize_for_serialization(self, obj): 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 ff7f136569f5..bafaa8698d60 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 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 @@ def _fake_return_string_serialize( @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 @@ async def fake_uuid_example( @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 @@ async def fake_uuid_example_with_http_info( @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 928c3696c2a6..7ce51c480c26 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 os import re import tempfile +import uuid from urllib.parse import quote from typing import Tuple, Optional, List, Dict, Union @@ -359,6 +360,8 @@ def sanitize_for_serialization(self, obj): 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 bb3a58acc52b..8d70a96f3a7c 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 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 5e28a547c67d..46998dfb5c68 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 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 94ac783bca77..312b2c8ee473 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 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 78d16e5f5045..c3eb9df64399 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 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 @@ def _fake_return_string_serialize( @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 @@ def fake_uuid_example( @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 @@ def fake_uuid_example_with_http_info( @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 660f2fd2c16d..33d7dde63b87 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 os import re import tempfile +import uuid from urllib.parse import quote from typing import Tuple, Optional, List, Dict, Union @@ -356,6 +357,8 @@ def sanitize_for_serialization(self, obj): 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 d0de1bc6b61e..4aca97f91c48 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 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 be56ba40f721..c21f442bb798 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 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 42bbd733b008..a8e0fa11ff84 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 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"]