Use Python uuid.UUID instead of StrictStr (#21740)

This commit is contained in:
Espen Haugsdal
2025-08-17 16:25:53 +02:00
committed by GitHub
parent 2513d82989
commit 43d58ee9b0
14 changed files with 43 additions and 19 deletions

View File

@@ -2024,7 +2024,8 @@ public abstract class AbstractPythonCodegen extends DefaultCodegen implements Co
} }
private PythonType uuidType(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) { private PythonType modelType(IJsonSchemaValidationProperties cp) {
@@ -2051,6 +2052,8 @@ public abstract class AbstractPythonCodegen extends DefaultCodegen implements Co
return arrayType(cp); return arrayType(cp);
} else if (cp.getIsMap() || cp.getIsFreeFormObject()) { } else if (cp.getIsMap() || cp.getIsFreeFormObject()) {
return mapType(cp); return mapType(cp);
} else if (cp.getIsUuid()) {
return uuidType(cp);
} else if (cp.getIsString()) { } else if (cp.getIsString()) {
return stringType(cp); return stringType(cp);
} else if (cp.getIsNumber() || cp.getIsFloat() || cp.getIsDouble()) { } else if (cp.getIsNumber() || cp.getIsFloat() || cp.getIsDouble()) {
@@ -2067,8 +2070,6 @@ public abstract class AbstractPythonCodegen extends DefaultCodegen implements Co
return anyType(cp); return anyType(cp);
} else if (cp.getIsDate() || cp.getIsDateTime()) { } else if (cp.getIsDate() || cp.getIsDateTime()) {
return dateType(cp); return dateType(cp);
} else if (cp.getIsUuid()) {
return uuidType(cp);
} }
return null; return null;

View File

@@ -12,6 +12,7 @@ import mimetypes
import os import os
import re import re
import tempfile import tempfile
import uuid
from urllib.parse import quote from urllib.parse import quote
from typing import Tuple, Optional, List, Dict, Union from typing import Tuple, Optional, List, Dict, Union
@@ -365,6 +366,8 @@ class ApiClient:
return obj.get_secret_value() return obj.get_secret_value()
elif isinstance(obj, self.PRIMITIVE_TYPES): elif isinstance(obj, self.PRIMITIVE_TYPES):
return obj return obj
elif isinstance(obj, uuid.UUID):
return str(obj)
elif isinstance(obj, list): elif isinstance(obj, list):
return [ return [
self.sanitize_for_serialization(sub_obj) for sub_obj in obj self.sanitize_for_serialization(sub_obj) for sub_obj in obj

View File

@@ -22,6 +22,7 @@ import mimetypes
import os import os
import re import re
import tempfile import tempfile
import uuid
from urllib.parse import quote from urllib.parse import quote
from typing import Tuple, Optional, List, Dict, Union from typing import Tuple, Optional, List, Dict, Union
@@ -357,6 +358,8 @@ class ApiClient:
return obj.get_secret_value() return obj.get_secret_value()
elif isinstance(obj, self.PRIMITIVE_TYPES): elif isinstance(obj, self.PRIMITIVE_TYPES):
return obj return obj
elif isinstance(obj, uuid.UUID):
return str(obj)
elif isinstance(obj, list): elif isinstance(obj, list):
return [ return [
self.sanitize_for_serialization(sub_obj) for sub_obj in obj self.sanitize_for_serialization(sub_obj) for sub_obj in obj

View File

@@ -22,6 +22,7 @@ import mimetypes
import os import os
import re import re
import tempfile import tempfile
import uuid
from urllib.parse import quote from urllib.parse import quote
from typing import Tuple, Optional, List, Dict, Union from typing import Tuple, Optional, List, Dict, Union
@@ -357,6 +358,8 @@ class ApiClient:
return obj.get_secret_value() return obj.get_secret_value()
elif isinstance(obj, self.PRIMITIVE_TYPES): elif isinstance(obj, self.PRIMITIVE_TYPES):
return obj return obj
elif isinstance(obj, uuid.UUID):
return str(obj)
elif isinstance(obj, list): elif isinstance(obj, list):
return [ return [
self.sanitize_for_serialization(sub_obj) for sub_obj in obj self.sanitize_for_serialization(sub_obj) for sub_obj in obj

View File

@@ -20,6 +20,7 @@ from datetime import date, datetime
from pydantic import Field, StrictBool, StrictBytes, StrictInt, StrictStr, field_validator from pydantic import Field, StrictBool, StrictBytes, StrictInt, StrictStr, field_validator
from typing import Any, Dict, List, Optional, Tuple, Union from typing import Any, Dict, List, Optional, Tuple, Union
from typing_extensions import Annotated from typing_extensions import Annotated
from uuid import UUID
from petstore_api.models.client import Client from petstore_api.models.client import Client
from petstore_api.models.enum_class import EnumClass from petstore_api.models.enum_class import EnumClass
from petstore_api.models.file_schema_test_class import FileSchemaTestClass from petstore_api.models.file_schema_test_class import FileSchemaTestClass
@@ -4913,7 +4914,7 @@ class FakeApi:
@validate_call @validate_call
async def fake_uuid_example( async def fake_uuid_example(
self, self,
uuid_example: Annotated[StrictStr, Field(description="uuid example")], uuid_example: Annotated[UUID, Field(description="uuid example")],
_request_timeout: Union[ _request_timeout: Union[
None, None,
Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)],
@@ -4979,7 +4980,7 @@ class FakeApi:
@validate_call @validate_call
async def fake_uuid_example_with_http_info( async def fake_uuid_example_with_http_info(
self, self,
uuid_example: Annotated[StrictStr, Field(description="uuid example")], uuid_example: Annotated[UUID, Field(description="uuid example")],
_request_timeout: Union[ _request_timeout: Union[
None, None,
Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)],
@@ -5045,7 +5046,7 @@ class FakeApi:
@validate_call @validate_call
async def fake_uuid_example_without_preload_content( async def fake_uuid_example_without_preload_content(
self, self,
uuid_example: Annotated[StrictStr, Field(description="uuid example")], uuid_example: Annotated[UUID, Field(description="uuid example")],
_request_timeout: Union[ _request_timeout: Union[
None, None,
Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)],

View File

@@ -21,6 +21,7 @@ import mimetypes
import os import os
import re import re
import tempfile import tempfile
import uuid
from urllib.parse import quote from urllib.parse import quote
from typing import Tuple, Optional, List, Dict, Union from typing import Tuple, Optional, List, Dict, Union
@@ -359,6 +360,8 @@ class ApiClient:
return obj.get_secret_value() return obj.get_secret_value()
elif isinstance(obj, self.PRIMITIVE_TYPES): elif isinstance(obj, self.PRIMITIVE_TYPES):
return obj return obj
elif isinstance(obj, uuid.UUID):
return str(obj)
elif isinstance(obj, list): elif isinstance(obj, list):
return [ return [
self.sanitize_for_serialization(sub_obj) for sub_obj in obj self.sanitize_for_serialization(sub_obj) for sub_obj in obj

View File

@@ -22,6 +22,7 @@ from decimal import Decimal
from pydantic import BaseModel, ConfigDict, Field, StrictBytes, StrictInt, StrictStr, field_validator from pydantic import BaseModel, ConfigDict, Field, StrictBytes, StrictInt, StrictStr, field_validator
from typing import Any, ClassVar, Dict, List, Optional, Tuple, Union from typing import Any, ClassVar, Dict, List, Optional, Tuple, Union
from typing_extensions import Annotated from typing_extensions import Annotated
from uuid import UUID
from typing import Optional, Set from typing import Optional, Set
from typing_extensions import Self from typing_extensions import Self
@@ -42,7 +43,7 @@ class FormatTest(BaseModel):
binary: Optional[Union[StrictBytes, StrictStr, Tuple[StrictStr, StrictBytes]]] = None binary: Optional[Union[StrictBytes, StrictStr, Tuple[StrictStr, StrictBytes]]] = None
var_date: date = Field(alias="date") var_date: date = Field(alias="date")
date_time: Optional[datetime] = Field(default=None, alias="dateTime") 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)] 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: 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.") 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.")

View File

@@ -18,8 +18,9 @@ import re # noqa: F401
import json import json
from datetime import datetime 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 typing import Any, ClassVar, Dict, List, Optional
from uuid import UUID
from petstore_api.models.animal import Animal from petstore_api.models.animal import Animal
from typing import Optional, Set from typing import Optional, Set
from typing_extensions import Self from typing_extensions import Self
@@ -28,7 +29,7 @@ class MixedPropertiesAndAdditionalPropertiesClass(BaseModel):
""" """
MixedPropertiesAndAdditionalPropertiesClass MixedPropertiesAndAdditionalPropertiesClass
""" # noqa: E501 """ # noqa: E501
uuid: Optional[StrictStr] = None uuid: Optional[UUID] = None
date_time: Optional[datetime] = Field(default=None, alias="dateTime") date_time: Optional[datetime] = Field(default=None, alias="dateTime")
map: Optional[Dict[str, Animal]] = None map: Optional[Dict[str, Animal]] = None
__properties: ClassVar[List[str]] = ["uuid", "dateTime", "map"] __properties: ClassVar[List[str]] = ["uuid", "dateTime", "map"]

View File

@@ -17,8 +17,9 @@ import pprint
import re # noqa: F401 import re # noqa: F401
import json import json
from pydantic import BaseModel, ConfigDict, StrictStr from pydantic import BaseModel, ConfigDict
from typing import Any, ClassVar, Dict, List from typing import Any, ClassVar, Dict, List
from uuid import UUID
from petstore_api.models.task_activity import TaskActivity from petstore_api.models.task_activity import TaskActivity
from typing import Optional, Set from typing import Optional, Set
from typing_extensions import Self from typing_extensions import Self
@@ -27,7 +28,7 @@ class Task(BaseModel):
""" """
Used to test oneOf enums with only one string value. Used to test oneOf enums with only one string value.
""" # noqa: E501 """ # noqa: E501
id: StrictStr id: UUID
activity: TaskActivity activity: TaskActivity
__properties: ClassVar[List[str]] = ["id", "activity"] __properties: ClassVar[List[str]] = ["id", "activity"]

View File

@@ -20,6 +20,7 @@ from datetime import date, datetime
from pydantic import Field, StrictBool, StrictBytes, StrictFloat, StrictInt, StrictStr, field_validator from pydantic import Field, StrictBool, StrictBytes, StrictFloat, StrictInt, StrictStr, field_validator
from typing import Any, Dict, List, Optional, Tuple, Union from typing import Any, Dict, List, Optional, Tuple, Union
from typing_extensions import Annotated from typing_extensions import Annotated
from uuid import UUID
from petstore_api.models.client import Client from petstore_api.models.client import Client
from petstore_api.models.enum_class import EnumClass from petstore_api.models.enum_class import EnumClass
from petstore_api.models.file_schema_test_class import FileSchemaTestClass from petstore_api.models.file_schema_test_class import FileSchemaTestClass
@@ -4913,7 +4914,7 @@ class FakeApi:
@validate_call @validate_call
def fake_uuid_example( def fake_uuid_example(
self, self,
uuid_example: Annotated[StrictStr, Field(description="uuid example")], uuid_example: Annotated[UUID, Field(description="uuid example")],
_request_timeout: Union[ _request_timeout: Union[
None, None,
Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)],
@@ -4979,7 +4980,7 @@ class FakeApi:
@validate_call @validate_call
def fake_uuid_example_with_http_info( def fake_uuid_example_with_http_info(
self, self,
uuid_example: Annotated[StrictStr, Field(description="uuid example")], uuid_example: Annotated[UUID, Field(description="uuid example")],
_request_timeout: Union[ _request_timeout: Union[
None, None,
Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)],
@@ -5045,7 +5046,7 @@ class FakeApi:
@validate_call @validate_call
def fake_uuid_example_without_preload_content( def fake_uuid_example_without_preload_content(
self, self,
uuid_example: Annotated[StrictStr, Field(description="uuid example")], uuid_example: Annotated[UUID, Field(description="uuid example")],
_request_timeout: Union[ _request_timeout: Union[
None, None,
Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)],

View File

@@ -21,6 +21,7 @@ import mimetypes
import os import os
import re import re
import tempfile import tempfile
import uuid
from urllib.parse import quote from urllib.parse import quote
from typing import Tuple, Optional, List, Dict, Union from typing import Tuple, Optional, List, Dict, Union
@@ -356,6 +357,8 @@ class ApiClient:
return obj.get_secret_value() return obj.get_secret_value()
elif isinstance(obj, self.PRIMITIVE_TYPES): elif isinstance(obj, self.PRIMITIVE_TYPES):
return obj return obj
elif isinstance(obj, uuid.UUID):
return str(obj)
elif isinstance(obj, list): elif isinstance(obj, list):
return [ return [
self.sanitize_for_serialization(sub_obj) for sub_obj in obj self.sanitize_for_serialization(sub_obj) for sub_obj in obj

View File

@@ -22,6 +22,7 @@ from decimal import Decimal
from pydantic import BaseModel, ConfigDict, Field, StrictBytes, StrictInt, StrictStr, field_validator from pydantic import BaseModel, ConfigDict, Field, StrictBytes, StrictInt, StrictStr, field_validator
from typing import Any, ClassVar, Dict, List, Optional, Tuple, Union from typing import Any, ClassVar, Dict, List, Optional, Tuple, Union
from typing_extensions import Annotated from typing_extensions import Annotated
from uuid import UUID
from typing import Optional, Set from typing import Optional, Set
from typing_extensions import Self from typing_extensions import Self
@@ -42,7 +43,7 @@ class FormatTest(BaseModel):
binary: Optional[Union[StrictBytes, StrictStr, Tuple[StrictStr, StrictBytes]]] = None binary: Optional[Union[StrictBytes, StrictStr, Tuple[StrictStr, StrictBytes]]] = None
var_date: date = Field(alias="date") var_date: date = Field(alias="date")
date_time: Optional[datetime] = Field(default=None, alias="dateTime") 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)] 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: 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.") 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.")

View File

@@ -18,8 +18,9 @@ import re # noqa: F401
import json import json
from datetime import datetime 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 typing import Any, ClassVar, Dict, List, Optional
from uuid import UUID
from petstore_api.models.animal import Animal from petstore_api.models.animal import Animal
from typing import Optional, Set from typing import Optional, Set
from typing_extensions import Self from typing_extensions import Self
@@ -28,7 +29,7 @@ class MixedPropertiesAndAdditionalPropertiesClass(BaseModel):
""" """
MixedPropertiesAndAdditionalPropertiesClass MixedPropertiesAndAdditionalPropertiesClass
""" # noqa: E501 """ # noqa: E501
uuid: Optional[StrictStr] = None uuid: Optional[UUID] = None
date_time: Optional[datetime] = Field(default=None, alias="dateTime") date_time: Optional[datetime] = Field(default=None, alias="dateTime")
map: Optional[Dict[str, Animal]] = None map: Optional[Dict[str, Animal]] = None
additional_properties: Dict[str, Any] = {} additional_properties: Dict[str, Any] = {}

View File

@@ -17,8 +17,9 @@ import pprint
import re # noqa: F401 import re # noqa: F401
import json import json
from pydantic import BaseModel, ConfigDict, StrictStr from pydantic import BaseModel, ConfigDict
from typing import Any, ClassVar, Dict, List from typing import Any, ClassVar, Dict, List
from uuid import UUID
from petstore_api.models.task_activity import TaskActivity from petstore_api.models.task_activity import TaskActivity
from typing import Optional, Set from typing import Optional, Set
from typing_extensions import Self from typing_extensions import Self
@@ -27,7 +28,7 @@ class Task(BaseModel):
""" """
Used to test oneOf enums with only one string value. Used to test oneOf enums with only one string value.
""" # noqa: E501 """ # noqa: E501
id: StrictStr id: UUID
activity: TaskActivity activity: TaskActivity
additional_properties: Dict[str, Any] = {} additional_properties: Dict[str, Any] = {}
__properties: ClassVar[List[str]] = ["id", "activity"] __properties: ClassVar[List[str]] = ["id", "activity"]