Skip to content

Commit 43d58ee

Browse files
authored
Use Python uuid.UUID instead of StrictStr (#21740)
1 parent 2513d82 commit 43d58ee

14 files changed

Lines changed: 43 additions & 19 deletions

File tree

modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractPythonCodegen.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2024,7 +2024,8 @@ private PythonType dateType(IJsonSchemaValidationProperties cp) {
20242024
}
20252025

20262026
private PythonType uuidType(IJsonSchemaValidationProperties cp) {
2027-
return new PythonType(cp.getDataType());
2027+
moduleImports.add("uuid", "UUID");
2028+
return new PythonType("UUID");
20282029
}
20292030

20302031
private PythonType modelType(IJsonSchemaValidationProperties cp) {
@@ -2051,6 +2052,8 @@ private PythonType fromCommon(IJsonSchemaValidationProperties cp) {
20512052
return arrayType(cp);
20522053
} else if (cp.getIsMap() || cp.getIsFreeFormObject()) {
20532054
return mapType(cp);
2055+
} else if (cp.getIsUuid()) {
2056+
return uuidType(cp);
20542057
} else if (cp.getIsString()) {
20552058
return stringType(cp);
20562059
} else if (cp.getIsNumber() || cp.getIsFloat() || cp.getIsDouble()) {
@@ -2067,8 +2070,6 @@ private PythonType fromCommon(IJsonSchemaValidationProperties cp) {
20672070
return anyType(cp);
20682071
} else if (cp.getIsDate() || cp.getIsDateTime()) {
20692072
return dateType(cp);
2070-
} else if (cp.getIsUuid()) {
2071-
return uuidType(cp);
20722073
}
20732074

20742075
return null;

modules/openapi-generator/src/main/resources/python/api_client.mustache

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import mimetypes
1212
import os
1313
import re
1414
import tempfile
15+
import uuid
1516

1617
from urllib.parse import quote
1718
from typing import Tuple, Optional, List, Dict, Union
@@ -365,6 +366,8 @@ class ApiClient:
365366
return obj.get_secret_value()
366367
elif isinstance(obj, self.PRIMITIVE_TYPES):
367368
return obj
369+
elif isinstance(obj, uuid.UUID):
370+
return str(obj)
368371
elif isinstance(obj, list):
369372
return [
370373
self.sanitize_for_serialization(sub_obj) for sub_obj in obj

samples/client/echo_api/python-disallowAdditionalPropertiesIfNotPresent/openapi_client/api_client.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import os
2323
import re
2424
import tempfile
25+
import uuid
2526

2627
from urllib.parse import quote
2728
from typing import Tuple, Optional, List, Dict, Union
@@ -357,6 +358,8 @@ def sanitize_for_serialization(self, obj):
357358
return obj.get_secret_value()
358359
elif isinstance(obj, self.PRIMITIVE_TYPES):
359360
return obj
361+
elif isinstance(obj, uuid.UUID):
362+
return str(obj)
360363
elif isinstance(obj, list):
361364
return [
362365
self.sanitize_for_serialization(sub_obj) for sub_obj in obj

samples/client/echo_api/python/openapi_client/api_client.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import os
2323
import re
2424
import tempfile
25+
import uuid
2526

2627
from urllib.parse import quote
2728
from typing import Tuple, Optional, List, Dict, Union
@@ -357,6 +358,8 @@ def sanitize_for_serialization(self, obj):
357358
return obj.get_secret_value()
358359
elif isinstance(obj, self.PRIMITIVE_TYPES):
359360
return obj
361+
elif isinstance(obj, uuid.UUID):
362+
return str(obj)
360363
elif isinstance(obj, list):
361364
return [
362365
self.sanitize_for_serialization(sub_obj) for sub_obj in obj

samples/openapi3/client/petstore/python-aiohttp/petstore_api/api/fake_api.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
from pydantic import Field, StrictBool, StrictBytes, StrictInt, StrictStr, field_validator
2121
from typing import Any, Dict, List, Optional, Tuple, Union
2222
from typing_extensions import Annotated
23+
from uuid import UUID
2324
from petstore_api.models.client import Client
2425
from petstore_api.models.enum_class import EnumClass
2526
from petstore_api.models.file_schema_test_class import FileSchemaTestClass
@@ -4913,7 +4914,7 @@ def _fake_return_string_serialize(
49134914
@validate_call
49144915
async def fake_uuid_example(
49154916
self,
4916-
uuid_example: Annotated[StrictStr, Field(description="uuid example")],
4917+
uuid_example: Annotated[UUID, Field(description="uuid example")],
49174918
_request_timeout: Union[
49184919
None,
49194920
Annotated[StrictFloat, Field(gt=0)],
@@ -4979,7 +4980,7 @@ async def fake_uuid_example(
49794980
@validate_call
49804981
async def fake_uuid_example_with_http_info(
49814982
self,
4982-
uuid_example: Annotated[StrictStr, Field(description="uuid example")],
4983+
uuid_example: Annotated[UUID, Field(description="uuid example")],
49834984
_request_timeout: Union[
49844985
None,
49854986
Annotated[StrictFloat, Field(gt=0)],
@@ -5045,7 +5046,7 @@ async def fake_uuid_example_with_http_info(
50455046
@validate_call
50465047
async def fake_uuid_example_without_preload_content(
50475048
self,
5048-
uuid_example: Annotated[StrictStr, Field(description="uuid example")],
5049+
uuid_example: Annotated[UUID, Field(description="uuid example")],
50495050
_request_timeout: Union[
50505051
None,
50515052
Annotated[StrictFloat, Field(gt=0)],

samples/openapi3/client/petstore/python-aiohttp/petstore_api/api_client.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import os
2222
import re
2323
import tempfile
24+
import uuid
2425

2526
from urllib.parse import quote
2627
from typing import Tuple, Optional, List, Dict, Union
@@ -359,6 +360,8 @@ def sanitize_for_serialization(self, obj):
359360
return obj.get_secret_value()
360361
elif isinstance(obj, self.PRIMITIVE_TYPES):
361362
return obj
363+
elif isinstance(obj, uuid.UUID):
364+
return str(obj)
362365
elif isinstance(obj, list):
363366
return [
364367
self.sanitize_for_serialization(sub_obj) for sub_obj in obj

samples/openapi3/client/petstore/python-aiohttp/petstore_api/models/format_test.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
from pydantic import BaseModel, ConfigDict, Field, StrictBytes, StrictInt, StrictStr, field_validator
2323
from typing import Any, ClassVar, Dict, List, Optional, Tuple, Union
2424
from typing_extensions import Annotated
25+
from uuid import UUID
2526
from typing import Optional, Set
2627
from typing_extensions import Self
2728

@@ -42,7 +43,7 @@ class FormatTest(BaseModel):
4243
binary: Optional[Union[StrictBytes, StrictStr, Tuple[StrictStr, StrictBytes]]] = None
4344
var_date: date = Field(alias="date")
4445
date_time: Optional[datetime] = Field(default=None, alias="dateTime")
45-
uuid: Optional[StrictStr] = None
46+
uuid: Optional[UUID] = None
4647
password: Annotated[str, Field(min_length=10, strict=True, max_length=64)]
4748
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.")
4849
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.")

samples/openapi3/client/petstore/python-aiohttp/petstore_api/models/mixed_properties_and_additional_properties_class.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,9 @@
1818
import json
1919

2020
from datetime import datetime
21-
from pydantic import BaseModel, ConfigDict, Field, StrictStr
21+
from pydantic import BaseModel, ConfigDict, Field
2222
from typing import Any, ClassVar, Dict, List, Optional
23+
from uuid import UUID
2324
from petstore_api.models.animal import Animal
2425
from typing import Optional, Set
2526
from typing_extensions import Self
@@ -28,7 +29,7 @@ class MixedPropertiesAndAdditionalPropertiesClass(BaseModel):
2829
"""
2930
MixedPropertiesAndAdditionalPropertiesClass
3031
""" # noqa: E501
31-
uuid: Optional[StrictStr] = None
32+
uuid: Optional[UUID] = None
3233
date_time: Optional[datetime] = Field(default=None, alias="dateTime")
3334
map: Optional[Dict[str, Animal]] = None
3435
__properties: ClassVar[List[str]] = ["uuid", "dateTime", "map"]

samples/openapi3/client/petstore/python-aiohttp/petstore_api/models/task.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,9 @@
1717
import re # noqa: F401
1818
import json
1919

20-
from pydantic import BaseModel, ConfigDict, StrictStr
20+
from pydantic import BaseModel, ConfigDict
2121
from typing import Any, ClassVar, Dict, List
22+
from uuid import UUID
2223
from petstore_api.models.task_activity import TaskActivity
2324
from typing import Optional, Set
2425
from typing_extensions import Self
@@ -27,7 +28,7 @@ class Task(BaseModel):
2728
"""
2829
Used to test oneOf enums with only one string value.
2930
""" # noqa: E501
30-
id: StrictStr
31+
id: UUID
3132
activity: TaskActivity
3233
__properties: ClassVar[List[str]] = ["id", "activity"]
3334

samples/openapi3/client/petstore/python/petstore_api/api/fake_api.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
from pydantic import Field, StrictBool, StrictBytes, StrictFloat, StrictInt, StrictStr, field_validator
2121
from typing import Any, Dict, List, Optional, Tuple, Union
2222
from typing_extensions import Annotated
23+
from uuid import UUID
2324
from petstore_api.models.client import Client
2425
from petstore_api.models.enum_class import EnumClass
2526
from petstore_api.models.file_schema_test_class import FileSchemaTestClass
@@ -4913,7 +4914,7 @@ def _fake_return_string_serialize(
49134914
@validate_call
49144915
def fake_uuid_example(
49154916
self,
4916-
uuid_example: Annotated[StrictStr, Field(description="uuid example")],
4917+
uuid_example: Annotated[UUID, Field(description="uuid example")],
49174918
_request_timeout: Union[
49184919
None,
49194920
Annotated[StrictFloat, Field(gt=0)],
@@ -4979,7 +4980,7 @@ def fake_uuid_example(
49794980
@validate_call
49804981
def fake_uuid_example_with_http_info(
49814982
self,
4982-
uuid_example: Annotated[StrictStr, Field(description="uuid example")],
4983+
uuid_example: Annotated[UUID, Field(description="uuid example")],
49834984
_request_timeout: Union[
49844985
None,
49854986
Annotated[StrictFloat, Field(gt=0)],
@@ -5045,7 +5046,7 @@ def fake_uuid_example_with_http_info(
50455046
@validate_call
50465047
def fake_uuid_example_without_preload_content(
50475048
self,
5048-
uuid_example: Annotated[StrictStr, Field(description="uuid example")],
5049+
uuid_example: Annotated[UUID, Field(description="uuid example")],
50495050
_request_timeout: Union[
50505051
None,
50515052
Annotated[StrictFloat, Field(gt=0)],

0 commit comments

Comments
 (0)