diff --git a/services/secretsmanager/oas_commit b/services/secretsmanager/oas_commit index e3713dde3..b129c2291 100644 --- a/services/secretsmanager/oas_commit +++ b/services/secretsmanager/oas_commit @@ -1 +1 @@ -0e64886dd0847341800d7191ed193b75413be998 +98c11e0ee4834ddaaa474eccc437d234e6276a70 diff --git a/services/secretsmanager/src/stackit/secretsmanager/api_client.py b/services/secretsmanager/src/stackit/secretsmanager/api_client.py index d79029b32..6ee21f75c 100644 --- a/services/secretsmanager/src/stackit/secretsmanager/api_client.py +++ b/services/secretsmanager/src/stackit/secretsmanager/api_client.py @@ -66,6 +66,7 @@ class ApiClient: "date": datetime.date, "datetime": datetime.datetime, "decimal": decimal.Decimal, + "UUID": uuid.UUID, "object": object, } _pool = None @@ -265,7 +266,7 @@ def response_deserialize( response_text = None return_data = None try: - if response_type == "bytearray": + if response_type in ("bytearray", "bytes"): return_data = response_data.data elif response_type == "file": return_data = self.__deserialize_file(response_data) @@ -326,25 +327,20 @@ def sanitize_for_serialization(self, obj): return obj.isoformat() elif isinstance(obj, decimal.Decimal): return str(obj) - elif isinstance(obj, dict): - obj_dict = obj + return {key: self.sanitize_for_serialization(val) for key, val in obj.items()} + + # Convert model obj to dict except + # attributes `openapi_types`, `attribute_map` + # and attributes which value is not None. + # Convert attribute name to json key in + # model definition for request. + if hasattr(obj, "to_dict") and callable(getattr(obj, "to_dict")): + obj_dict = obj.to_dict() else: - # Convert model obj to dict except - # attributes `openapi_types`, `attribute_map` - # and attributes which value is not None. - # Convert attribute name to json key in - # model definition for request. - if hasattr(obj, "to_dict") and callable(getattr(obj, "to_dict")): # noqa: B009 - obj_dict = obj.to_dict() - else: - obj_dict = obj.__dict__ - - if isinstance(obj_dict, list): - # here we handle instances that can either be a list or something else, and only became a real list by calling to_dict() # noqa: E501 - return self.sanitize_for_serialization(obj_dict) + obj_dict = obj.__dict__ - return {key: self.sanitize_for_serialization(val) for key, val in obj_dict.items()} + return self.sanitize_for_serialization(obj_dict) def deserialize(self, response_text: str, response_type: str, content_type: Optional[str]): """Deserializes response into an object. @@ -417,6 +413,8 @@ def __deserialize(self, data, klass): return self.__deserialize_datetime(data) elif klass is decimal.Decimal: return decimal.Decimal(data) + elif klass is uuid.UUID: + return uuid.UUID(data) elif issubclass(klass, Enum): return self.__deserialize_enum(data, klass) else: diff --git a/services/secretsmanager/src/stackit/secretsmanager/models/acl.py b/services/secretsmanager/src/stackit/secretsmanager/models/acl.py index 5e8fe2460..4baad123a 100644 --- a/services/secretsmanager/src/stackit/secretsmanager/models/acl.py +++ b/services/secretsmanager/src/stackit/secretsmanager/models/acl.py @@ -19,6 +19,7 @@ from uuid import UUID from pydantic import BaseModel, ConfigDict, Field, StrictStr +from pydantic_core import to_jsonable_python from typing_extensions import Self @@ -32,7 +33,8 @@ class ACL(BaseModel): __properties: ClassVar[List[str]] = ["cidr", "id"] model_config = ConfigDict( - populate_by_name=True, + validate_by_name=True, + validate_by_alias=True, validate_assignment=True, protected_namespaces=(), ) @@ -43,8 +45,7 @@ def to_str(self) -> str: def to_json(self) -> str: """Returns the JSON representation of the model using alias""" - # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead - return json.dumps(self.to_dict()) + return json.dumps(to_jsonable_python(self.to_dict())) @classmethod def from_json(cls, json_str: str) -> Optional[Self]: diff --git a/services/secretsmanager/src/stackit/secretsmanager/models/bad_request.py b/services/secretsmanager/src/stackit/secretsmanager/models/bad_request.py index a2550abff..3e2ed1a54 100644 --- a/services/secretsmanager/src/stackit/secretsmanager/models/bad_request.py +++ b/services/secretsmanager/src/stackit/secretsmanager/models/bad_request.py @@ -18,6 +18,7 @@ from typing import Any, ClassVar, Dict, List, Optional, Set from pydantic import BaseModel, ConfigDict, Field, StrictStr +from pydantic_core import to_jsonable_python from typing_extensions import Self @@ -30,7 +31,8 @@ class BadRequest(BaseModel): __properties: ClassVar[List[str]] = ["message"] model_config = ConfigDict( - populate_by_name=True, + validate_by_name=True, + validate_by_alias=True, validate_assignment=True, protected_namespaces=(), ) @@ -41,8 +43,7 @@ def to_str(self) -> str: def to_json(self) -> str: """Returns the JSON representation of the model using alias""" - # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead - return json.dumps(self.to_dict()) + return json.dumps(to_jsonable_python(self.to_dict())) @classmethod def from_json(cls, json_str: str) -> Optional[Self]: diff --git a/services/secretsmanager/src/stackit/secretsmanager/models/conflict.py b/services/secretsmanager/src/stackit/secretsmanager/models/conflict.py index c55a6ef01..ea5b75f7f 100644 --- a/services/secretsmanager/src/stackit/secretsmanager/models/conflict.py +++ b/services/secretsmanager/src/stackit/secretsmanager/models/conflict.py @@ -18,6 +18,7 @@ from typing import Any, ClassVar, Dict, List, Optional, Set from pydantic import BaseModel, ConfigDict, Field, StrictStr +from pydantic_core import to_jsonable_python from typing_extensions import Self @@ -30,7 +31,8 @@ class Conflict(BaseModel): __properties: ClassVar[List[str]] = ["message"] model_config = ConfigDict( - populate_by_name=True, + validate_by_name=True, + validate_by_alias=True, validate_assignment=True, protected_namespaces=(), ) @@ -41,8 +43,7 @@ def to_str(self) -> str: def to_json(self) -> str: """Returns the JSON representation of the model using alias""" - # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead - return json.dumps(self.to_dict()) + return json.dumps(to_jsonable_python(self.to_dict())) @classmethod def from_json(cls, json_str: str) -> Optional[Self]: diff --git a/services/secretsmanager/src/stackit/secretsmanager/models/create_acl_payload.py b/services/secretsmanager/src/stackit/secretsmanager/models/create_acl_payload.py index 24859996d..1cabf4a51 100644 --- a/services/secretsmanager/src/stackit/secretsmanager/models/create_acl_payload.py +++ b/services/secretsmanager/src/stackit/secretsmanager/models/create_acl_payload.py @@ -18,6 +18,7 @@ from typing import Any, ClassVar, Dict, List, Optional, Set from pydantic import BaseModel, ConfigDict, Field, StrictStr +from pydantic_core import to_jsonable_python from typing_extensions import Self @@ -30,7 +31,8 @@ class CreateACLPayload(BaseModel): __properties: ClassVar[List[str]] = ["cidr"] model_config = ConfigDict( - populate_by_name=True, + validate_by_name=True, + validate_by_alias=True, validate_assignment=True, protected_namespaces=(), ) @@ -41,8 +43,7 @@ def to_str(self) -> str: def to_json(self) -> str: """Returns the JSON representation of the model using alias""" - # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead - return json.dumps(self.to_dict()) + return json.dumps(to_jsonable_python(self.to_dict())) @classmethod def from_json(cls, json_str: str) -> Optional[Self]: diff --git a/services/secretsmanager/src/stackit/secretsmanager/models/create_instance_payload.py b/services/secretsmanager/src/stackit/secretsmanager/models/create_instance_payload.py index b4915b7de..7fe81d565 100644 --- a/services/secretsmanager/src/stackit/secretsmanager/models/create_instance_payload.py +++ b/services/secretsmanager/src/stackit/secretsmanager/models/create_instance_payload.py @@ -18,6 +18,7 @@ from typing import Any, ClassVar, Dict, List, Optional, Set from pydantic import BaseModel, ConfigDict, Field, StrictStr +from pydantic_core import to_jsonable_python from typing_extensions import Self from stackit.secretsmanager.models.kms_key_payload import KmsKeyPayload @@ -33,7 +34,8 @@ class CreateInstancePayload(BaseModel): __properties: ClassVar[List[str]] = ["kmsKey", "name"] model_config = ConfigDict( - populate_by_name=True, + validate_by_name=True, + validate_by_alias=True, validate_assignment=True, protected_namespaces=(), ) @@ -44,8 +46,7 @@ def to_str(self) -> str: def to_json(self) -> str: """Returns the JSON representation of the model using alias""" - # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead - return json.dumps(self.to_dict()) + return json.dumps(to_jsonable_python(self.to_dict())) @classmethod def from_json(cls, json_str: str) -> Optional[Self]: diff --git a/services/secretsmanager/src/stackit/secretsmanager/models/create_user_payload.py b/services/secretsmanager/src/stackit/secretsmanager/models/create_user_payload.py index 7aa0a6197..8fc2f835e 100644 --- a/services/secretsmanager/src/stackit/secretsmanager/models/create_user_payload.py +++ b/services/secretsmanager/src/stackit/secretsmanager/models/create_user_payload.py @@ -24,6 +24,7 @@ StrictBool, StrictStr, ) +from pydantic_core import to_jsonable_python from typing_extensions import Self @@ -39,7 +40,8 @@ class CreateUserPayload(BaseModel): __properties: ClassVar[List[str]] = ["description", "write"] model_config = ConfigDict( - populate_by_name=True, + validate_by_name=True, + validate_by_alias=True, validate_assignment=True, protected_namespaces=(), ) @@ -50,8 +52,7 @@ def to_str(self) -> str: def to_json(self) -> str: """Returns the JSON representation of the model using alias""" - # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead - return json.dumps(self.to_dict()) + return json.dumps(to_jsonable_python(self.to_dict())) @classmethod def from_json(cls, json_str: str) -> Optional[Self]: diff --git a/services/secretsmanager/src/stackit/secretsmanager/models/instance.py b/services/secretsmanager/src/stackit/secretsmanager/models/instance.py index 927d115c1..d8ebbd9f8 100644 --- a/services/secretsmanager/src/stackit/secretsmanager/models/instance.py +++ b/services/secretsmanager/src/stackit/secretsmanager/models/instance.py @@ -19,6 +19,7 @@ from uuid import UUID from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr +from pydantic_core import to_jsonable_python from typing_extensions import Self from stackit.secretsmanager.models.kms_key_payload import KmsKeyPayload @@ -65,7 +66,8 @@ class Instance(BaseModel): ] model_config = ConfigDict( - populate_by_name=True, + validate_by_name=True, + validate_by_alias=True, validate_assignment=True, protected_namespaces=(), ) @@ -76,8 +78,7 @@ def to_str(self) -> str: def to_json(self) -> str: """Returns the JSON representation of the model using alias""" - # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead - return json.dumps(self.to_dict()) + return json.dumps(to_jsonable_python(self.to_dict())) @classmethod def from_json(cls, json_str: str) -> Optional[Self]: diff --git a/services/secretsmanager/src/stackit/secretsmanager/models/kms_key_payload.py b/services/secretsmanager/src/stackit/secretsmanager/models/kms_key_payload.py index d088cfeca..80807c318 100644 --- a/services/secretsmanager/src/stackit/secretsmanager/models/kms_key_payload.py +++ b/services/secretsmanager/src/stackit/secretsmanager/models/kms_key_payload.py @@ -19,6 +19,7 @@ from uuid import UUID from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr +from pydantic_core import to_jsonable_python from typing_extensions import Self @@ -37,7 +38,8 @@ class KmsKeyPayload(BaseModel): __properties: ClassVar[List[str]] = ["keyId", "keyRingId", "keyVersion", "serviceAccountEmail"] model_config = ConfigDict( - populate_by_name=True, + validate_by_name=True, + validate_by_alias=True, validate_assignment=True, protected_namespaces=(), ) @@ -48,8 +50,7 @@ def to_str(self) -> str: def to_json(self) -> str: """Returns the JSON representation of the model using alias""" - # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead - return json.dumps(self.to_dict()) + return json.dumps(to_jsonable_python(self.to_dict())) @classmethod def from_json(cls, json_str: str) -> Optional[Self]: diff --git a/services/secretsmanager/src/stackit/secretsmanager/models/list_acls_response.py b/services/secretsmanager/src/stackit/secretsmanager/models/list_acls_response.py index 695bd4bef..0a23c2559 100644 --- a/services/secretsmanager/src/stackit/secretsmanager/models/list_acls_response.py +++ b/services/secretsmanager/src/stackit/secretsmanager/models/list_acls_response.py @@ -18,6 +18,7 @@ from typing import Any, ClassVar, Dict, List, Optional, Set from pydantic import BaseModel, ConfigDict +from pydantic_core import to_jsonable_python from typing_extensions import Self from stackit.secretsmanager.models.acl import ACL @@ -32,7 +33,8 @@ class ListACLsResponse(BaseModel): __properties: ClassVar[List[str]] = ["acls"] model_config = ConfigDict( - populate_by_name=True, + validate_by_name=True, + validate_by_alias=True, validate_assignment=True, protected_namespaces=(), ) @@ -43,8 +45,7 @@ def to_str(self) -> str: def to_json(self) -> str: """Returns the JSON representation of the model using alias""" - # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead - return json.dumps(self.to_dict()) + return json.dumps(to_jsonable_python(self.to_dict())) @classmethod def from_json(cls, json_str: str) -> Optional[Self]: diff --git a/services/secretsmanager/src/stackit/secretsmanager/models/list_instances_response.py b/services/secretsmanager/src/stackit/secretsmanager/models/list_instances_response.py index b1769e910..ed048e3f5 100644 --- a/services/secretsmanager/src/stackit/secretsmanager/models/list_instances_response.py +++ b/services/secretsmanager/src/stackit/secretsmanager/models/list_instances_response.py @@ -18,6 +18,7 @@ from typing import Any, ClassVar, Dict, List, Optional, Set from pydantic import BaseModel, ConfigDict +from pydantic_core import to_jsonable_python from typing_extensions import Self from stackit.secretsmanager.models.instance import Instance @@ -32,7 +33,8 @@ class ListInstancesResponse(BaseModel): __properties: ClassVar[List[str]] = ["instances"] model_config = ConfigDict( - populate_by_name=True, + validate_by_name=True, + validate_by_alias=True, validate_assignment=True, protected_namespaces=(), ) @@ -43,8 +45,7 @@ def to_str(self) -> str: def to_json(self) -> str: """Returns the JSON representation of the model using alias""" - # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead - return json.dumps(self.to_dict()) + return json.dumps(to_jsonable_python(self.to_dict())) @classmethod def from_json(cls, json_str: str) -> Optional[Self]: diff --git a/services/secretsmanager/src/stackit/secretsmanager/models/list_users_response.py b/services/secretsmanager/src/stackit/secretsmanager/models/list_users_response.py index e690b4e75..87ec6addb 100644 --- a/services/secretsmanager/src/stackit/secretsmanager/models/list_users_response.py +++ b/services/secretsmanager/src/stackit/secretsmanager/models/list_users_response.py @@ -18,6 +18,7 @@ from typing import Any, ClassVar, Dict, List, Optional, Set from pydantic import BaseModel, ConfigDict +from pydantic_core import to_jsonable_python from typing_extensions import Self from stackit.secretsmanager.models.user import User @@ -32,7 +33,8 @@ class ListUsersResponse(BaseModel): __properties: ClassVar[List[str]] = ["users"] model_config = ConfigDict( - populate_by_name=True, + validate_by_name=True, + validate_by_alias=True, validate_assignment=True, protected_namespaces=(), ) @@ -43,8 +45,7 @@ def to_str(self) -> str: def to_json(self) -> str: """Returns the JSON representation of the model using alias""" - # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead - return json.dumps(self.to_dict()) + return json.dumps(to_jsonable_python(self.to_dict())) @classmethod def from_json(cls, json_str: str) -> Optional[Self]: diff --git a/services/secretsmanager/src/stackit/secretsmanager/models/not_found.py b/services/secretsmanager/src/stackit/secretsmanager/models/not_found.py index 749ebece6..68bc69fd5 100644 --- a/services/secretsmanager/src/stackit/secretsmanager/models/not_found.py +++ b/services/secretsmanager/src/stackit/secretsmanager/models/not_found.py @@ -18,6 +18,7 @@ from typing import Any, ClassVar, Dict, List, Optional, Set from pydantic import BaseModel, ConfigDict, Field, StrictStr +from pydantic_core import to_jsonable_python from typing_extensions import Self @@ -30,7 +31,8 @@ class NotFound(BaseModel): __properties: ClassVar[List[str]] = ["message"] model_config = ConfigDict( - populate_by_name=True, + validate_by_name=True, + validate_by_alias=True, validate_assignment=True, protected_namespaces=(), ) @@ -41,8 +43,7 @@ def to_str(self) -> str: def to_json(self) -> str: """Returns the JSON representation of the model using alias""" - # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead - return json.dumps(self.to_dict()) + return json.dumps(to_jsonable_python(self.to_dict())) @classmethod def from_json(cls, json_str: str) -> Optional[Self]: diff --git a/services/secretsmanager/src/stackit/secretsmanager/models/update_acl_payload.py b/services/secretsmanager/src/stackit/secretsmanager/models/update_acl_payload.py index 664b34069..49b76ad26 100644 --- a/services/secretsmanager/src/stackit/secretsmanager/models/update_acl_payload.py +++ b/services/secretsmanager/src/stackit/secretsmanager/models/update_acl_payload.py @@ -18,6 +18,7 @@ from typing import Any, ClassVar, Dict, List, Optional, Set from pydantic import BaseModel, ConfigDict, Field, StrictStr +from pydantic_core import to_jsonable_python from typing_extensions import Self @@ -30,7 +31,8 @@ class UpdateACLPayload(BaseModel): __properties: ClassVar[List[str]] = ["cidr"] model_config = ConfigDict( - populate_by_name=True, + validate_by_name=True, + validate_by_alias=True, validate_assignment=True, protected_namespaces=(), ) @@ -41,8 +43,7 @@ def to_str(self) -> str: def to_json(self) -> str: """Returns the JSON representation of the model using alias""" - # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead - return json.dumps(self.to_dict()) + return json.dumps(to_jsonable_python(self.to_dict())) @classmethod def from_json(cls, json_str: str) -> Optional[Self]: diff --git a/services/secretsmanager/src/stackit/secretsmanager/models/update_acls_payload.py b/services/secretsmanager/src/stackit/secretsmanager/models/update_acls_payload.py index 4eb534e12..1292939d2 100644 --- a/services/secretsmanager/src/stackit/secretsmanager/models/update_acls_payload.py +++ b/services/secretsmanager/src/stackit/secretsmanager/models/update_acls_payload.py @@ -18,6 +18,7 @@ from typing import Any, ClassVar, Dict, List, Optional, Set from pydantic import BaseModel, ConfigDict +from pydantic_core import to_jsonable_python from typing_extensions import Self from stackit.secretsmanager.models.update_acl_payload import UpdateACLPayload @@ -32,7 +33,8 @@ class UpdateACLsPayload(BaseModel): __properties: ClassVar[List[str]] = ["cidrs"] model_config = ConfigDict( - populate_by_name=True, + validate_by_name=True, + validate_by_alias=True, validate_assignment=True, protected_namespaces=(), ) @@ -43,8 +45,7 @@ def to_str(self) -> str: def to_json(self) -> str: """Returns the JSON representation of the model using alias""" - # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead - return json.dumps(self.to_dict()) + return json.dumps(to_jsonable_python(self.to_dict())) @classmethod def from_json(cls, json_str: str) -> Optional[Self]: diff --git a/services/secretsmanager/src/stackit/secretsmanager/models/update_instance_payload.py b/services/secretsmanager/src/stackit/secretsmanager/models/update_instance_payload.py index 91aefd7be..2ec7d9508 100644 --- a/services/secretsmanager/src/stackit/secretsmanager/models/update_instance_payload.py +++ b/services/secretsmanager/src/stackit/secretsmanager/models/update_instance_payload.py @@ -18,6 +18,7 @@ from typing import Any, ClassVar, Dict, List, Optional, Set from pydantic import BaseModel, ConfigDict, Field, StrictStr +from pydantic_core import to_jsonable_python from typing_extensions import Self from stackit.secretsmanager.models.kms_key_payload import KmsKeyPayload @@ -33,7 +34,8 @@ class UpdateInstancePayload(BaseModel): __properties: ClassVar[List[str]] = ["kmsKey", "name"] model_config = ConfigDict( - populate_by_name=True, + validate_by_name=True, + validate_by_alias=True, validate_assignment=True, protected_namespaces=(), ) @@ -44,8 +46,7 @@ def to_str(self) -> str: def to_json(self) -> str: """Returns the JSON representation of the model using alias""" - # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead - return json.dumps(self.to_dict()) + return json.dumps(to_jsonable_python(self.to_dict())) @classmethod def from_json(cls, json_str: str) -> Optional[Self]: diff --git a/services/secretsmanager/src/stackit/secretsmanager/models/update_user_payload.py b/services/secretsmanager/src/stackit/secretsmanager/models/update_user_payload.py index 2aadba226..9759d7353 100644 --- a/services/secretsmanager/src/stackit/secretsmanager/models/update_user_payload.py +++ b/services/secretsmanager/src/stackit/secretsmanager/models/update_user_payload.py @@ -24,6 +24,7 @@ StrictBool, StrictStr, ) +from pydantic_core import to_jsonable_python from typing_extensions import Self @@ -42,7 +43,8 @@ class UpdateUserPayload(BaseModel): __properties: ClassVar[List[str]] = ["description", "write"] model_config = ConfigDict( - populate_by_name=True, + validate_by_name=True, + validate_by_alias=True, validate_assignment=True, protected_namespaces=(), ) @@ -53,8 +55,7 @@ def to_str(self) -> str: def to_json(self) -> str: """Returns the JSON representation of the model using alias""" - # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead - return json.dumps(self.to_dict()) + return json.dumps(to_jsonable_python(self.to_dict())) @classmethod def from_json(cls, json_str: str) -> Optional[Self]: diff --git a/services/secretsmanager/src/stackit/secretsmanager/models/user.py b/services/secretsmanager/src/stackit/secretsmanager/models/user.py index 44b957ca3..d6bc1f007 100644 --- a/services/secretsmanager/src/stackit/secretsmanager/models/user.py +++ b/services/secretsmanager/src/stackit/secretsmanager/models/user.py @@ -25,6 +25,7 @@ StrictBool, StrictStr, ) +from pydantic_core import to_jsonable_python from typing_extensions import Self @@ -43,7 +44,8 @@ class User(BaseModel): __properties: ClassVar[List[str]] = ["description", "id", "password", "username", "write"] model_config = ConfigDict( - populate_by_name=True, + validate_by_name=True, + validate_by_alias=True, validate_assignment=True, protected_namespaces=(), ) @@ -54,8 +56,7 @@ def to_str(self) -> str: def to_json(self) -> str: """Returns the JSON representation of the model using alias""" - # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead - return json.dumps(self.to_dict()) + return json.dumps(to_jsonable_python(self.to_dict())) @classmethod def from_json(cls, json_str: str) -> Optional[Self]: