Skip to content

Commit 61f7009

Browse files
committed
support discriminator
1 parent c5f7570 commit 61f7009

File tree

1 file changed

+22
-1
lines changed

1 file changed

+22
-1
lines changed

bandwidth/models/multi_channel_channel_list_response_object.py

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,14 @@ class MultiChannelChannelListResponseObject(BaseModel):
5151
"protected_namespaces": (),
5252
}
5353

54-
discriminator_value_class_map: Dict[str, str] = {
54+
# Discriminator's property name (OpenAPI v3) - stored as class variable
55+
__openapi_discriminator_name__ = 'channel'
56+
57+
# Discriminator's mapping (OpenAPI v3) - stored as class variable
58+
__discriminator_value_class_map__ = {
59+
'MMS': 'MultiChannelChannelListMMSResponseObject',
60+
'RBM': 'MultiChannelChannelListRBMResponseObject',
61+
'SMS': 'MultiChannelChannelListSMSResponseObject'
5562
}
5663

5764
def __init__(self, *args, **kwargs) -> None:
@@ -100,6 +107,20 @@ def from_dict(cls, obj: Dict[str, Any]) -> Self:
100107
def from_json(cls, json_str: str) -> Self:
101108
"""Returns the object represented by the json string"""
102109
instance = cls.model_construct()
110+
json_obj = json.loads(json_str)
111+
112+
discriminator_value = json_obj.get(cls.__openapi_discriminator_name__)
113+
114+
if discriminator_value and discriminator_value in cls.__discriminator_value_class_map__:
115+
class_name = cls.__discriminator_value_class_map__[discriminator_value]
116+
target_class = globals()[class_name]
117+
try:
118+
instance.actual_instance = target_class.from_json(json_str)
119+
return instance
120+
except (ValidationError, ValueError) as e:
121+
raise ValueError(f"Failed to deserialize using discriminator '{discriminator_value}' -> {class_name}: {str(e)}")
122+
123+
# Fallback: try all schemas if discriminator not found or failed
103124
error_messages = []
104125
# anyof_schema_1_validator: Optional[MultiChannelChannelListRBMResponseObject] = None
105126
try:

0 commit comments

Comments
 (0)