syllable-sdk 0.44.20__py3-none-any.whl → 0.45.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (214) hide show
  1. syllable_sdk/_version.py +3 -3
  2. syllable_sdk/basesdk.py +20 -6
  3. syllable_sdk/models/__init__.py +5 -0
  4. syllable_sdk/models/agent_listop.py +35 -36
  5. syllable_sdk/models/agentcreate.py +38 -39
  6. syllable_sdk/models/agentresponse.py +49 -50
  7. syllable_sdk/models/agentupdate.py +38 -39
  8. syllable_sdk/models/available_targetsop.py +35 -36
  9. syllable_sdk/models/availabletarget.py +1 -17
  10. syllable_sdk/models/batchdetails.py +38 -39
  11. syllable_sdk/models/body_directory_member_bulk_load.py +18 -1
  12. syllable_sdk/models/body_insights_folder_upload_file.py +34 -1
  13. syllable_sdk/models/body_organizations_create.py +30 -19
  14. syllable_sdk/models/body_organizations_delete.py +14 -19
  15. syllable_sdk/models/body_organizations_update.py +34 -30
  16. syllable_sdk/models/body_outbound_batch_upload.py +34 -1
  17. syllable_sdk/models/body_pronunciations_upload_csv.py +18 -1
  18. syllable_sdk/models/bridgephrasesconfig.py +20 -1
  19. syllable_sdk/models/callaction.py +14 -19
  20. syllable_sdk/models/celexpression.py +18 -1
  21. syllable_sdk/models/channel.py +14 -19
  22. syllable_sdk/models/channel_targets_listop.py +35 -36
  23. syllable_sdk/models/channelconfigview.py +20 -19
  24. syllable_sdk/models/channels_listop.py +35 -36
  25. syllable_sdk/models/channeltargetcreaterequest.py +14 -19
  26. syllable_sdk/models/channeltargetresponse.py +14 -19
  27. syllable_sdk/models/channeltargetupdaterequest.py +14 -19
  28. syllable_sdk/models/communicationbatch.py +36 -37
  29. syllable_sdk/models/communicationbatchinput.py +14 -19
  30. syllable_sdk/models/communicationbatchupdate.py +14 -19
  31. syllable_sdk/models/communicationrequestresult.py +37 -38
  32. syllable_sdk/models/conditionaltext.py +14 -19
  33. syllable_sdk/models/conditionalvalue.py +14 -19
  34. syllable_sdk/models/context.py +14 -19
  35. syllable_sdk/models/contexttaskmetadata.py +14 -19
  36. syllable_sdk/models/contexttoolinfo.py +14 -19
  37. syllable_sdk/models/conversation.py +44 -45
  38. syllable_sdk/models/conversations_listop.py +35 -36
  39. syllable_sdk/models/custom_messages_listop.py +35 -36
  40. syllable_sdk/models/custommessagecreaterequest.py +14 -19
  41. syllable_sdk/models/custommessageresponse.py +14 -19
  42. syllable_sdk/models/custommessagerule.py +18 -19
  43. syllable_sdk/models/custommessageupdaterequest.py +14 -19
  44. syllable_sdk/models/daotoolresponse.py +18 -29
  45. syllable_sdk/models/data_sources_listop.py +35 -36
  46. syllable_sdk/models/datasourcecreaterequest.py +14 -19
  47. syllable_sdk/models/datasourcedetailresponse.py +18 -24
  48. syllable_sdk/models/datasourcemetadataresponse.py +18 -24
  49. syllable_sdk/models/datasourceupdaterequest.py +16 -19
  50. syllable_sdk/models/dialogtoolcall.py +1 -17
  51. syllable_sdk/models/dictionarymetadata.py +18 -1
  52. syllable_sdk/models/directory_member_createop.py +18 -1
  53. syllable_sdk/models/directory_member_downloadop.py +18 -1
  54. syllable_sdk/models/directory_member_get_by_idop.py +18 -1
  55. syllable_sdk/models/directory_member_listop.py +36 -37
  56. syllable_sdk/models/directory_member_test_extensionop.py +13 -18
  57. syllable_sdk/models/directory_member_updateop.py +18 -1
  58. syllable_sdk/models/directoryextension.py +14 -19
  59. syllable_sdk/models/directoryextensionnumber.py +14 -19
  60. syllable_sdk/models/directorymember.py +14 -19
  61. syllable_sdk/models/directorymembercreate.py +14 -19
  62. syllable_sdk/models/directorymembertestresponse.py +14 -19
  63. syllable_sdk/models/directorymemberupdate.py +14 -19
  64. syllable_sdk/models/emailconfigurations.py +19 -0
  65. syllable_sdk/models/event.py +38 -39
  66. syllable_sdk/models/events_listop.py +35 -36
  67. syllable_sdk/models/eventtask.py +16 -28
  68. syllable_sdk/models/eventtaskevents.py +14 -19
  69. syllable_sdk/models/expressiontask.py +30 -39
  70. syllable_sdk/models/expressiontaskevents.py +14 -19
  71. syllable_sdk/models/folderdetails.py +14 -19
  72. syllable_sdk/models/get_bridge_phrases_configop.py +14 -19
  73. syllable_sdk/models/getvalueaction.py +16 -19
  74. syllable_sdk/models/incident_listop.py +35 -36
  75. syllable_sdk/models/incidentcreaterequest.py +18 -19
  76. syllable_sdk/models/incidentresponse.py +31 -32
  77. syllable_sdk/models/incidentupdaterequest.py +18 -19
  78. syllable_sdk/models/incrementaction.py +14 -19
  79. syllable_sdk/models/inputparameter.py +27 -36
  80. syllable_sdk/models/insight_tool_listop.py +35 -36
  81. syllable_sdk/models/insights_folder_listop.py +35 -36
  82. syllable_sdk/models/insights_folder_upload_fileop.py +33 -34
  83. syllable_sdk/models/insights_listop.py +35 -36
  84. syllable_sdk/models/insights_upload_list_filesop.py +35 -36
  85. syllable_sdk/models/insights_workflow_listop.py +35 -36
  86. syllable_sdk/models/insightsfolder.py +14 -19
  87. syllable_sdk/models/insightsfolderinput.py +14 -19
  88. syllable_sdk/models/insightsoutput.py +26 -32
  89. syllable_sdk/models/insightsuploadfile.py +37 -38
  90. syllable_sdk/models/insightsworkflowqueuesession.py +14 -19
  91. syllable_sdk/models/insighttooloutput.py +14 -19
  92. syllable_sdk/models/insighttooltestinput.py +14 -19
  93. syllable_sdk/models/insightworkflowcondition.py +34 -35
  94. syllable_sdk/models/insightworkflowinput.py +14 -19
  95. syllable_sdk/models/insightworkflowoutput.py +22 -25
  96. syllable_sdk/models/inspectlatencyresponse.py +18 -1
  97. syllable_sdk/models/internaltool.py +18 -1
  98. syllable_sdk/models/jmespathexpression.py +18 -1
  99. syllable_sdk/models/language_groups_listop.py +35 -36
  100. syllable_sdk/models/languageconfig.py +14 -19
  101. syllable_sdk/models/languagegroupcreaterequest.py +14 -19
  102. syllable_sdk/models/languagegroupresponse.py +14 -19
  103. syllable_sdk/models/languagegroupupdaterequest.py +14 -19
  104. syllable_sdk/models/languagesamplecreaterequest.py +16 -24
  105. syllable_sdk/models/latencyentry.py +14 -19
  106. syllable_sdk/models/listresponse_agentresponse_.py +14 -19
  107. syllable_sdk/models/listresponse_availabletarget_.py +14 -19
  108. syllable_sdk/models/listresponse_channel_.py +14 -19
  109. syllable_sdk/models/listresponse_channeltargetresponse_.py +14 -19
  110. syllable_sdk/models/listresponse_communicationbatch_.py +14 -19
  111. syllable_sdk/models/listresponse_conversation_.py +14 -19
  112. syllable_sdk/models/listresponse_custommessageresponse_.py +14 -19
  113. syllable_sdk/models/listresponse_dashboardresponse_.py +14 -19
  114. syllable_sdk/models/listresponse_datasourcemetadataresponse_.py +14 -19
  115. syllable_sdk/models/listresponse_directorymember_.py +14 -19
  116. syllable_sdk/models/listresponse_event_.py +14 -19
  117. syllable_sdk/models/listresponse_incidentresponse_.py +14 -19
  118. syllable_sdk/models/listresponse_insightsfolder_.py +14 -19
  119. syllable_sdk/models/listresponse_insightsoutput_.py +14 -19
  120. syllable_sdk/models/listresponse_insightsuploadfile_.py +14 -19
  121. syllable_sdk/models/listresponse_insighttooloutput_.py +14 -19
  122. syllable_sdk/models/listresponse_insightworkflowoutput_.py +14 -19
  123. syllable_sdk/models/listresponse_languagegroupresponse_.py +14 -19
  124. syllable_sdk/models/listresponse_outboundcampaign_.py +14 -19
  125. syllable_sdk/models/listresponse_promptresponse_.py +14 -19
  126. syllable_sdk/models/listresponse_roleresponse_.py +14 -19
  127. syllable_sdk/models/listresponse_serviceresponse_.py +14 -19
  128. syllable_sdk/models/listresponse_session_.py +14 -19
  129. syllable_sdk/models/listresponse_sessionlabel_.py +14 -19
  130. syllable_sdk/models/listresponse_toolresponse_.py +14 -19
  131. syllable_sdk/models/listresponse_userresponse_.py +14 -19
  132. syllable_sdk/models/listresponse_voicegroupresponse_.py +14 -19
  133. syllable_sdk/models/loadtoolfromfiletask.py +16 -27
  134. syllable_sdk/models/nextstep.py +14 -19
  135. syllable_sdk/models/organizationchannelconfig.py +24 -29
  136. syllable_sdk/models/organizationchannelcreaterequest.py +14 -19
  137. syllable_sdk/models/organizationchannelupdaterequest.py +14 -19
  138. syllable_sdk/models/organizationresponse.py +32 -33
  139. syllable_sdk/models/outbound_batch_listop.py +35 -36
  140. syllable_sdk/models/outbound_batch_resultsop.py +13 -18
  141. syllable_sdk/models/outbound_batch_uploadop.py +18 -1
  142. syllable_sdk/models/outbound_campaign_listop.py +35 -36
  143. syllable_sdk/models/outboundcampaign.py +47 -48
  144. syllable_sdk/models/outboundcampaigninput.py +43 -44
  145. syllable_sdk/models/permissionresponse.py +14 -19
  146. syllable_sdk/models/post_list_dashboardop.py +35 -36
  147. syllable_sdk/models/promptcreaterequest.py +26 -32
  148. syllable_sdk/models/prompthistory.py +24 -30
  149. syllable_sdk/models/promptllmconfig.py +16 -26
  150. syllable_sdk/models/promptresponse.py +41 -42
  151. syllable_sdk/models/prompts_listop.py +35 -36
  152. syllable_sdk/models/promptupdaterequest.py +26 -32
  153. syllable_sdk/models/pronunciationoverride.py +28 -1
  154. syllable_sdk/models/pronunciationoverridesdictionary.py +18 -1
  155. syllable_sdk/models/pronunciationscsvuploadresponse.py +18 -1
  156. syllable_sdk/models/rolecreaterequest.py +14 -19
  157. syllable_sdk/models/roleresponse.py +14 -19
  158. syllable_sdk/models/roles_deleteop.py +13 -18
  159. syllable_sdk/models/roles_listop.py +35 -36
  160. syllable_sdk/models/roleupdaterequest.py +14 -19
  161. syllable_sdk/models/saveaction.py +14 -19
  162. syllable_sdk/models/sayaction.py +14 -19
  163. syllable_sdk/models/security.py +18 -1
  164. syllable_sdk/models/service_listop.py +35 -36
  165. syllable_sdk/models/servicecreaterequest.py +14 -19
  166. syllable_sdk/models/serviceresponse.py +14 -19
  167. syllable_sdk/models/serviceupdaterequest.py +14 -19
  168. syllable_sdk/models/session.py +60 -61
  169. syllable_sdk/models/session_labels_listop.py +35 -36
  170. syllable_sdk/models/sessionaction.py +18 -19
  171. syllable_sdk/models/sessionlabel.py +14 -19
  172. syllable_sdk/models/sessionlabelcreate.py +14 -19
  173. syllable_sdk/models/sessionrecordingresponse.py +14 -19
  174. syllable_sdk/models/sessions_listop.py +35 -36
  175. syllable_sdk/models/sessionsummaryresponse.py +14 -19
  176. syllable_sdk/models/sessiontext.py +14 -19
  177. syllable_sdk/models/setvalueaction.py +14 -19
  178. syllable_sdk/models/statictoolparameter.py +14 -19
  179. syllable_sdk/models/step.py +18 -1
  180. syllable_sdk/models/stepeventactions.py +14 -19
  181. syllable_sdk/models/stepstask.py +25 -28
  182. syllable_sdk/models/steptools.py +14 -19
  183. syllable_sdk/models/summaryentry.py +14 -19
  184. syllable_sdk/models/supportedllm.py +14 -19
  185. syllable_sdk/models/takeoutstatusresponse.py +14 -19
  186. syllable_sdk/models/telephonyconfigurations.py +38 -39
  187. syllable_sdk/models/testmessage.py +16 -19
  188. syllable_sdk/models/testmessageresponse.py +14 -19
  189. syllable_sdk/models/tool_listop.py +35 -36
  190. syllable_sdk/models/tooldefinition.py +34 -35
  191. syllable_sdk/models/tooldetailresponse.py +18 -29
  192. syllable_sdk/models/tooloptions.py +18 -1
  193. syllable_sdk/models/toolparametertransform.py +14 -19
  194. syllable_sdk/models/toolparametertransformcondition.py +14 -19
  195. syllable_sdk/models/toolresponse.py +18 -29
  196. syllable_sdk/models/toolupdaterequest.py +14 -19
  197. syllable_sdk/models/twiliochannelconfigupdate.py +14 -19
  198. syllable_sdk/models/twiliochannelupdaterequest.py +14 -19
  199. syllable_sdk/models/update_bridge_phrases_configop.py +13 -18
  200. syllable_sdk/models/usercreaterequest.py +14 -19
  201. syllable_sdk/models/userresponse.py +30 -31
  202. syllable_sdk/models/users_listop.py +35 -36
  203. syllable_sdk/models/users_send_emailop.py +18 -1
  204. syllable_sdk/models/userupdaterequest.py +14 -19
  205. syllable_sdk/models/variable.py +38 -39
  206. syllable_sdk/models/voice_groups_listop.py +35 -36
  207. syllable_sdk/models/voicegroupcreaterequest.py +14 -19
  208. syllable_sdk/models/voicegroupresponse.py +14 -19
  209. syllable_sdk/models/voicegroupupdaterequest.py +14 -19
  210. syllable_sdk/models/voicesamplecreaterequest.py +16 -24
  211. syllable_sdk/utils/__init__.py +10 -1
  212. {syllable_sdk-0.44.20.dist-info → syllable_sdk-0.45.0.dist-info}/METADATA +3 -3
  213. {syllable_sdk-0.44.20.dist-info → syllable_sdk-0.45.0.dist-info}/RECORD +214 -213
  214. {syllable_sdk-0.44.20.dist-info → syllable_sdk-0.45.0.dist-info}/WHEEL +0 -0
@@ -86,50 +86,49 @@ class BatchDetails(BaseModel):
86
86
 
87
87
  @model_serializer(mode="wrap")
88
88
  def serialize_model(self, handler):
89
- optional_fields = [
90
- "expires_on",
91
- "paused",
92
- "status",
93
- "upload_filename",
94
- "created_at",
95
- "deleted_at",
96
- "deleted_reason",
97
- "last_updated_at",
98
- "error_message",
99
- "status_counts",
100
- ]
101
- nullable_fields = [
102
- "expires_on",
103
- "paused",
104
- "upload_filename",
105
- "deleted_at",
106
- "deleted_reason",
107
- "last_updated_at",
108
- "error_message",
109
- "status_counts",
110
- ]
111
- null_default_fields = []
112
-
89
+ optional_fields = set(
90
+ [
91
+ "expires_on",
92
+ "paused",
93
+ "status",
94
+ "upload_filename",
95
+ "created_at",
96
+ "deleted_at",
97
+ "deleted_reason",
98
+ "last_updated_at",
99
+ "error_message",
100
+ "status_counts",
101
+ ]
102
+ )
103
+ nullable_fields = set(
104
+ [
105
+ "expires_on",
106
+ "paused",
107
+ "upload_filename",
108
+ "deleted_at",
109
+ "deleted_reason",
110
+ "last_updated_at",
111
+ "error_message",
112
+ "status_counts",
113
+ ]
114
+ )
113
115
  serialized = handler(self)
114
-
115
116
  m = {}
116
117
 
117
118
  for n, f in type(self).model_fields.items():
118
119
  k = f.alias or n
119
120
  val = serialized.get(k)
120
- serialized.pop(k, None)
121
-
122
- optional_nullable = k in optional_fields and k in nullable_fields
123
- is_set = (
124
- self.__pydantic_fields_set__.intersection({n})
125
- or k in null_default_fields
126
- ) # pylint: disable=no-member
127
-
128
- if val is not None and val != UNSET_SENTINEL:
129
- m[k] = val
130
- elif val != UNSET_SENTINEL and (
131
- not k in optional_fields or (optional_nullable and is_set)
132
- ):
133
- m[k] = val
121
+ is_nullable_and_explicitly_set = (
122
+ k in nullable_fields
123
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
124
+ )
125
+
126
+ if val != UNSET_SENTINEL:
127
+ if (
128
+ val is not None
129
+ or k not in optional_fields
130
+ or is_nullable_and_explicitly_set
131
+ ):
132
+ m[k] = val
134
133
 
135
134
  return m
@@ -3,7 +3,8 @@
3
3
  from __future__ import annotations
4
4
  import io
5
5
  import pydantic
6
- from syllable_sdk.types import BaseModel
6
+ from pydantic import model_serializer
7
+ from syllable_sdk.types import BaseModel, UNSET_SENTINEL
7
8
  from syllable_sdk.utils import FieldMetadata, MultipartFormMetadata
8
9
  from typing import IO, Optional, Union
9
10
  from typing_extensions import Annotated, NotRequired, TypedDict
@@ -32,6 +33,22 @@ class BodyDirectoryMemberBulkLoadFile(BaseModel):
32
33
  FieldMetadata(multipart=True),
33
34
  ] = None
34
35
 
36
+ @model_serializer(mode="wrap")
37
+ def serialize_model(self, handler):
38
+ optional_fields = set(["contentType"])
39
+ serialized = handler(self)
40
+ m = {}
41
+
42
+ for n, f in type(self).model_fields.items():
43
+ k = f.alias or n
44
+ val = serialized.get(k)
45
+
46
+ if val != UNSET_SENTINEL:
47
+ if val is not None or k not in optional_fields:
48
+ m[k] = val
49
+
50
+ return m
51
+
35
52
 
36
53
  class BodyDirectoryMemberBulkLoadTypedDict(TypedDict):
37
54
  file: BodyDirectoryMemberBulkLoadFileTypedDict
@@ -3,7 +3,8 @@
3
3
  from __future__ import annotations
4
4
  import io
5
5
  import pydantic
6
- from syllable_sdk.types import BaseModel
6
+ from pydantic import model_serializer
7
+ from syllable_sdk.types import BaseModel, UNSET_SENTINEL
7
8
  from syllable_sdk.utils import FieldMetadata, MultipartFormMetadata
8
9
  from typing import IO, Optional, Union
9
10
  from typing_extensions import Annotated, NotRequired, TypedDict
@@ -32,6 +33,22 @@ class BodyInsightsFolderUploadFileFile(BaseModel):
32
33
  FieldMetadata(multipart=True),
33
34
  ] = None
34
35
 
36
+ @model_serializer(mode="wrap")
37
+ def serialize_model(self, handler):
38
+ optional_fields = set(["contentType"])
39
+ serialized = handler(self)
40
+ m = {}
41
+
42
+ for n, f in type(self).model_fields.items():
43
+ k = f.alias or n
44
+ val = serialized.get(k)
45
+
46
+ if val != UNSET_SENTINEL:
47
+ if val is not None or k not in optional_fields:
48
+ m[k] = val
49
+
50
+ return m
51
+
35
52
 
36
53
  class BodyInsightsFolderUploadFileTypedDict(TypedDict):
37
54
  file: NotRequired[BodyInsightsFolderUploadFileFileTypedDict]
@@ -42,3 +59,19 @@ class BodyInsightsFolderUploadFile(BaseModel):
42
59
  Optional[BodyInsightsFolderUploadFileFile],
43
60
  FieldMetadata(multipart=MultipartFormMetadata(file=True)),
44
61
  ] = None
62
+
63
+ @model_serializer(mode="wrap")
64
+ def serialize_model(self, handler):
65
+ optional_fields = set(["file"])
66
+ serialized = handler(self)
67
+ m = {}
68
+
69
+ for n, f in type(self).model_fields.items():
70
+ k = f.alias or n
71
+ val = serialized.get(k)
72
+
73
+ if val != UNSET_SENTINEL:
74
+ if val is not None or k not in optional_fields:
75
+ m[k] = val
76
+
77
+ return m
@@ -39,6 +39,22 @@ class BodyOrganizationsCreateLogo(BaseModel):
39
39
  FieldMetadata(multipart=True),
40
40
  ] = None
41
41
 
42
+ @model_serializer(mode="wrap")
43
+ def serialize_model(self, handler):
44
+ optional_fields = set(["contentType"])
45
+ serialized = handler(self)
46
+ m = {}
47
+
48
+ for n, f in type(self).model_fields.items():
49
+ k = f.alias or n
50
+ val = serialized.get(k)
51
+
52
+ if val != UNSET_SENTINEL:
53
+ if val is not None or k not in optional_fields:
54
+ m[k] = val
55
+
56
+ return m
57
+
42
58
 
43
59
  class BodyOrganizationsCreateTypedDict(TypedDict):
44
60
  logo: BodyOrganizationsCreateLogoTypedDict
@@ -76,30 +92,25 @@ class BodyOrganizationsCreate(BaseModel):
76
92
 
77
93
  @model_serializer(mode="wrap")
78
94
  def serialize_model(self, handler):
79
- optional_fields = ["description", "domains", "saml_provider_id"]
80
- nullable_fields = ["description", "domains", "saml_provider_id"]
81
- null_default_fields = []
82
-
95
+ optional_fields = set(["description", "domains", "saml_provider_id"])
96
+ nullable_fields = set(["description", "domains", "saml_provider_id"])
83
97
  serialized = handler(self)
84
-
85
98
  m = {}
86
99
 
87
100
  for n, f in type(self).model_fields.items():
88
101
  k = f.alias or n
89
102
  val = serialized.get(k)
90
- serialized.pop(k, None)
91
-
92
- optional_nullable = k in optional_fields and k in nullable_fields
93
- is_set = (
94
- self.__pydantic_fields_set__.intersection({n})
95
- or k in null_default_fields
96
- ) # pylint: disable=no-member
97
-
98
- if val is not None and val != UNSET_SENTINEL:
99
- m[k] = val
100
- elif val != UNSET_SENTINEL and (
101
- not k in optional_fields or (optional_nullable and is_set)
102
- ):
103
- m[k] = val
103
+ is_nullable_and_explicitly_set = (
104
+ k in nullable_fields
105
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
106
+ )
107
+
108
+ if val != UNSET_SENTINEL:
109
+ if (
110
+ val is not None
111
+ or k not in optional_fields
112
+ or is_nullable_and_explicitly_set
113
+ ):
114
+ m[k] = val
104
115
 
105
116
  return m
@@ -24,30 +24,25 @@ class BodyOrganizationsDelete(BaseModel):
24
24
 
25
25
  @model_serializer(mode="wrap")
26
26
  def serialize_model(self, handler):
27
- optional_fields = ["delete_comments"]
28
- nullable_fields = ["delete_comments"]
29
- null_default_fields = []
30
-
27
+ optional_fields = set(["delete_comments"])
28
+ nullable_fields = set(["delete_comments"])
31
29
  serialized = handler(self)
32
-
33
30
  m = {}
34
31
 
35
32
  for n, f in type(self).model_fields.items():
36
33
  k = f.alias or n
37
34
  val = serialized.get(k)
38
- serialized.pop(k, None)
39
-
40
- optional_nullable = k in optional_fields and k in nullable_fields
41
- is_set = (
42
- self.__pydantic_fields_set__.intersection({n})
43
- or k in null_default_fields
44
- ) # pylint: disable=no-member
45
-
46
- if val is not None and val != UNSET_SENTINEL:
47
- m[k] = val
48
- elif val != UNSET_SENTINEL and (
49
- not k in optional_fields or (optional_nullable and is_set)
50
- ):
51
- m[k] = val
35
+ is_nullable_and_explicitly_set = (
36
+ k in nullable_fields
37
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
38
+ )
39
+
40
+ if val != UNSET_SENTINEL:
41
+ if (
42
+ val is not None
43
+ or k not in optional_fields
44
+ or is_nullable_and_explicitly_set
45
+ ):
46
+ m[k] = val
52
47
 
53
48
  return m
@@ -39,6 +39,22 @@ class BodyOrganizationsUpdateLogo(BaseModel):
39
39
  FieldMetadata(multipart=True),
40
40
  ] = None
41
41
 
42
+ @model_serializer(mode="wrap")
43
+ def serialize_model(self, handler):
44
+ optional_fields = set(["contentType"])
45
+ serialized = handler(self)
46
+ m = {}
47
+
48
+ for n, f in type(self).model_fields.items():
49
+ k = f.alias or n
50
+ val = serialized.get(k)
51
+
52
+ if val != UNSET_SENTINEL:
53
+ if val is not None or k not in optional_fields:
54
+ m[k] = val
55
+
56
+ return m
57
+
42
58
 
43
59
  class BodyOrganizationsUpdateTypedDict(TypedDict):
44
60
  display_name: str
@@ -83,41 +99,29 @@ class BodyOrganizationsUpdate(BaseModel):
83
99
 
84
100
  @model_serializer(mode="wrap")
85
101
  def serialize_model(self, handler):
86
- optional_fields = [
87
- "logo",
88
- "description",
89
- "domains",
90
- "saml_provider_id",
91
- "update_comments",
92
- ]
93
- nullable_fields = [
94
- "description",
95
- "domains",
96
- "saml_provider_id",
97
- "update_comments",
98
- ]
99
- null_default_fields = []
100
-
102
+ optional_fields = set(
103
+ ["logo", "description", "domains", "saml_provider_id", "update_comments"]
104
+ )
105
+ nullable_fields = set(
106
+ ["description", "domains", "saml_provider_id", "update_comments"]
107
+ )
101
108
  serialized = handler(self)
102
-
103
109
  m = {}
104
110
 
105
111
  for n, f in type(self).model_fields.items():
106
112
  k = f.alias or n
107
113
  val = serialized.get(k)
108
- serialized.pop(k, None)
109
-
110
- optional_nullable = k in optional_fields and k in nullable_fields
111
- is_set = (
112
- self.__pydantic_fields_set__.intersection({n})
113
- or k in null_default_fields
114
- ) # pylint: disable=no-member
115
-
116
- if val is not None and val != UNSET_SENTINEL:
117
- m[k] = val
118
- elif val != UNSET_SENTINEL and (
119
- not k in optional_fields or (optional_nullable and is_set)
120
- ):
121
- m[k] = val
114
+ is_nullable_and_explicitly_set = (
115
+ k in nullable_fields
116
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
117
+ )
118
+
119
+ if val != UNSET_SENTINEL:
120
+ if (
121
+ val is not None
122
+ or k not in optional_fields
123
+ or is_nullable_and_explicitly_set
124
+ ):
125
+ m[k] = val
122
126
 
123
127
  return m
@@ -3,7 +3,8 @@
3
3
  from __future__ import annotations
4
4
  import io
5
5
  import pydantic
6
- from syllable_sdk.types import BaseModel
6
+ from pydantic import model_serializer
7
+ from syllable_sdk.types import BaseModel, UNSET_SENTINEL
7
8
  from syllable_sdk.utils import FieldMetadata, MultipartFormMetadata
8
9
  from typing import IO, Optional, Union
9
10
  from typing_extensions import Annotated, NotRequired, TypedDict
@@ -32,6 +33,22 @@ class BodyOutboundBatchUploadFile(BaseModel):
32
33
  FieldMetadata(multipart=True),
33
34
  ] = None
34
35
 
36
+ @model_serializer(mode="wrap")
37
+ def serialize_model(self, handler):
38
+ optional_fields = set(["contentType"])
39
+ serialized = handler(self)
40
+ m = {}
41
+
42
+ for n, f in type(self).model_fields.items():
43
+ k = f.alias or n
44
+ val = serialized.get(k)
45
+
46
+ if val != UNSET_SENTINEL:
47
+ if val is not None or k not in optional_fields:
48
+ m[k] = val
49
+
50
+ return m
51
+
35
52
 
36
53
  class BodyOutboundBatchUploadTypedDict(TypedDict):
37
54
  file: NotRequired[BodyOutboundBatchUploadFileTypedDict]
@@ -42,3 +59,19 @@ class BodyOutboundBatchUpload(BaseModel):
42
59
  Optional[BodyOutboundBatchUploadFile],
43
60
  FieldMetadata(multipart=MultipartFormMetadata(file=True)),
44
61
  ] = None
62
+
63
+ @model_serializer(mode="wrap")
64
+ def serialize_model(self, handler):
65
+ optional_fields = set(["file"])
66
+ serialized = handler(self)
67
+ m = {}
68
+
69
+ for n, f in type(self).model_fields.items():
70
+ k = f.alias or n
71
+ val = serialized.get(k)
72
+
73
+ if val != UNSET_SENTINEL:
74
+ if val is not None or k not in optional_fields:
75
+ m[k] = val
76
+
77
+ return m
@@ -3,7 +3,8 @@
3
3
  from __future__ import annotations
4
4
  import io
5
5
  import pydantic
6
- from syllable_sdk.types import BaseModel
6
+ from pydantic import model_serializer
7
+ from syllable_sdk.types import BaseModel, UNSET_SENTINEL
7
8
  from syllable_sdk.utils import FieldMetadata, MultipartFormMetadata
8
9
  from typing import IO, Optional, Union
9
10
  from typing_extensions import Annotated, NotRequired, TypedDict
@@ -32,6 +33,22 @@ class BodyPronunciationsUploadCsvFile(BaseModel):
32
33
  FieldMetadata(multipart=True),
33
34
  ] = None
34
35
 
36
+ @model_serializer(mode="wrap")
37
+ def serialize_model(self, handler):
38
+ optional_fields = set(["contentType"])
39
+ serialized = handler(self)
40
+ m = {}
41
+
42
+ for n, f in type(self).model_fields.items():
43
+ k = f.alias or n
44
+ val = serialized.get(k)
45
+
46
+ if val != UNSET_SENTINEL:
47
+ if val is not None or k not in optional_fields:
48
+ m[k] = val
49
+
50
+ return m
51
+
35
52
 
36
53
  class BodyPronunciationsUploadCsvTypedDict(TypedDict):
37
54
  file: BodyPronunciationsUploadCsvFileTypedDict
@@ -1,7 +1,8 @@
1
1
  """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
2
 
3
3
  from __future__ import annotations
4
- from syllable_sdk.types import BaseModel
4
+ from pydantic import model_serializer
5
+ from syllable_sdk.types import BaseModel, UNSET_SENTINEL
5
6
  from typing import List, Optional
6
7
  from typing_extensions import NotRequired, TypedDict
7
8
 
@@ -28,3 +29,21 @@ class BridgePhrasesConfig(BaseModel):
28
29
 
29
30
  tool_responses: Optional[List[str]] = None
30
31
  r"""Messages to say when a tool call is in progress."""
32
+
33
+ @model_serializer(mode="wrap")
34
+ def serialize_model(self, handler):
35
+ optional_fields = set(
36
+ ["first_slow_messages", "very_slow_messages", "tool_responses"]
37
+ )
38
+ serialized = handler(self)
39
+ m = {}
40
+
41
+ for n, f in type(self).model_fields.items():
42
+ k = f.alias or n
43
+ val = serialized.get(k)
44
+
45
+ if val != UNSET_SENTINEL:
46
+ if val is not None or k not in optional_fields:
47
+ m[k] = val
48
+
49
+ return m
@@ -87,30 +87,25 @@ class CallAction(BaseModel):
87
87
 
88
88
  @model_serializer(mode="wrap")
89
89
  def serialize_model(self, handler):
90
- optional_fields = ["if", "action", "arguments", "auto_populate"]
91
- nullable_fields = ["if", "arguments"]
92
- null_default_fields = []
93
-
90
+ optional_fields = set(["if", "action", "arguments", "auto_populate"])
91
+ nullable_fields = set(["if", "arguments"])
94
92
  serialized = handler(self)
95
-
96
93
  m = {}
97
94
 
98
95
  for n, f in type(self).model_fields.items():
99
96
  k = f.alias or n
100
97
  val = serialized.get(k)
101
- serialized.pop(k, None)
102
-
103
- optional_nullable = k in optional_fields and k in nullable_fields
104
- is_set = (
105
- self.__pydantic_fields_set__.intersection({n})
106
- or k in null_default_fields
107
- ) # pylint: disable=no-member
108
-
109
- if val is not None and val != UNSET_SENTINEL:
110
- m[k] = val
111
- elif val != UNSET_SENTINEL and (
112
- not k in optional_fields or (optional_nullable and is_set)
113
- ):
114
- m[k] = val
98
+ is_nullable_and_explicitly_set = (
99
+ k in nullable_fields
100
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
101
+ )
102
+
103
+ if val != UNSET_SENTINEL:
104
+ if (
105
+ val is not None
106
+ or k not in optional_fields
107
+ or is_nullable_and_explicitly_set
108
+ ):
109
+ m[k] = val
115
110
 
116
111
  return m
@@ -2,8 +2,9 @@
2
2
 
3
3
  from __future__ import annotations
4
4
  import pydantic
5
+ from pydantic import model_serializer
5
6
  from pydantic.functional_validators import AfterValidator
6
- from syllable_sdk.types import BaseModel
7
+ from syllable_sdk.types import BaseModel, UNSET_SENTINEL
7
8
  from syllable_sdk.utils import validate_const
8
9
  from typing import Literal, Optional
9
10
  from typing_extensions import Annotated, TypedDict
@@ -29,3 +30,19 @@ class CelExpression(BaseModel):
29
30
  pydantic.Field(alias="type"),
30
31
  ] = "cel"
31
32
  r"""Google Common Expression Language."""
33
+
34
+ @model_serializer(mode="wrap")
35
+ def serialize_model(self, handler):
36
+ optional_fields = set(["type"])
37
+ serialized = handler(self)
38
+ m = {}
39
+
40
+ for n, f in type(self).model_fields.items():
41
+ k = f.alias or n
42
+ val = serialized.get(k)
43
+
44
+ if val != UNSET_SENTINEL:
45
+ if val is not None or k not in optional_fields:
46
+ m[k] = val
47
+
48
+ return m
@@ -51,30 +51,25 @@ class Channel(BaseModel):
51
51
 
52
52
  @model_serializer(mode="wrap")
53
53
  def serialize_model(self, handler):
54
- optional_fields = ["supported_modes", "is_system_channel", "config"]
55
- nullable_fields = ["supported_modes", "config"]
56
- null_default_fields = []
57
-
54
+ optional_fields = set(["supported_modes", "is_system_channel", "config"])
55
+ nullable_fields = set(["supported_modes", "config"])
58
56
  serialized = handler(self)
59
-
60
57
  m = {}
61
58
 
62
59
  for n, f in type(self).model_fields.items():
63
60
  k = f.alias or n
64
61
  val = serialized.get(k)
65
- serialized.pop(k, None)
66
-
67
- optional_nullable = k in optional_fields and k in nullable_fields
68
- is_set = (
69
- self.__pydantic_fields_set__.intersection({n})
70
- or k in null_default_fields
71
- ) # pylint: disable=no-member
72
-
73
- if val is not None and val != UNSET_SENTINEL:
74
- m[k] = val
75
- elif val != UNSET_SENTINEL and (
76
- not k in optional_fields or (optional_nullable and is_set)
77
- ):
78
- m[k] = val
62
+ is_nullable_and_explicitly_set = (
63
+ k in nullable_fields
64
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
65
+ )
66
+
67
+ if val != UNSET_SENTINEL:
68
+ if (
69
+ val is not None
70
+ or k not in optional_fields
71
+ or is_nullable_and_explicitly_set
72
+ ):
73
+ m[k] = val
79
74
 
80
75
  return m