wavix-python-sdk 1.0.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 (497) hide show
  1. wavix/__init__.py +801 -0
  2. wavix/_default_clients.py +32 -0
  3. wavix/api_keys/__init__.py +4 -0
  4. wavix/api_keys/client.py +764 -0
  5. wavix/api_keys/raw_client.py +1191 -0
  6. wavix/billing/__init__.py +41 -0
  7. wavix/billing/client.py +82 -0
  8. wavix/billing/invoices/__init__.py +34 -0
  9. wavix/billing/invoices/client.py +203 -0
  10. wavix/billing/invoices/raw_client.py +302 -0
  11. wavix/billing/invoices/types/__init__.py +34 -0
  12. wavix/billing/invoices/types/list_invoices_response.py +31 -0
  13. wavix/billing/raw_client.py +13 -0
  14. wavix/billing/transactions/__init__.py +34 -0
  15. wavix/billing/transactions/client.py +209 -0
  16. wavix/billing/transactions/raw_client.py +253 -0
  17. wavix/billing/transactions/types/__init__.py +34 -0
  18. wavix/billing/transactions/types/list_transactions_response.py +31 -0
  19. wavix/buy/__init__.py +61 -0
  20. wavix/buy/cities/__init__.py +34 -0
  21. wavix/buy/cities/client.py +134 -0
  22. wavix/buy/cities/raw_client.py +201 -0
  23. wavix/buy/cities/types/__init__.py +34 -0
  24. wavix/buy/cities/types/list_cities_response.py +23 -0
  25. wavix/buy/client.py +139 -0
  26. wavix/buy/countries/__init__.py +34 -0
  27. wavix/buy/countries/client.py +116 -0
  28. wavix/buy/countries/raw_client.py +144 -0
  29. wavix/buy/countries/types/__init__.py +34 -0
  30. wavix/buy/countries/types/list_countries_response.py +23 -0
  31. wavix/buy/numbers/__init__.py +34 -0
  32. wavix/buy/numbers/client.py +168 -0
  33. wavix/buy/numbers/raw_client.py +227 -0
  34. wavix/buy/numbers/types/__init__.py +34 -0
  35. wavix/buy/numbers/types/list_numbers_response.py +26 -0
  36. wavix/buy/raw_client.py +13 -0
  37. wavix/buy/region_cities/__init__.py +34 -0
  38. wavix/buy/region_cities/client.py +142 -0
  39. wavix/buy/region_cities/raw_client.py +207 -0
  40. wavix/buy/region_cities/types/__init__.py +34 -0
  41. wavix/buy/region_cities/types/list_region_cities_response.py +23 -0
  42. wavix/buy/regions/__init__.py +34 -0
  43. wavix/buy/regions/client.py +132 -0
  44. wavix/buy/regions/raw_client.py +222 -0
  45. wavix/buy/regions/types/__init__.py +34 -0
  46. wavix/buy/regions/types/list_regions_response.py +23 -0
  47. wavix/call_control/__init__.py +40 -0
  48. wavix/call_control/audio/__init__.py +4 -0
  49. wavix/call_control/audio/client.py +195 -0
  50. wavix/call_control/audio/raw_client.py +333 -0
  51. wavix/call_control/client.py +796 -0
  52. wavix/call_control/raw_client.py +1224 -0
  53. wavix/call_control/streams/__init__.py +4 -0
  54. wavix/call_control/streams/client.py +250 -0
  55. wavix/call_control/streams/raw_client.py +325 -0
  56. wavix/call_control/types/__init__.py +38 -0
  57. wavix/call_control/types/call_dtmf_collect_request_prompt.py +33 -0
  58. wavix/call_control/types/call_dtmf_collect_request_prompt_say.py +31 -0
  59. wavix/call_recording/__init__.py +4 -0
  60. wavix/call_recording/client.py +430 -0
  61. wavix/call_recording/raw_client.py +726 -0
  62. wavix/call_webhooks/__init__.py +37 -0
  63. wavix/call_webhooks/client.py +281 -0
  64. wavix/call_webhooks/raw_client.py +529 -0
  65. wavix/call_webhooks/types/__init__.py +38 -0
  66. wavix/call_webhooks/types/call_webhooks_create_request_event_type.py +5 -0
  67. wavix/call_webhooks/types/delete_call_webhooks_request_event_type.py +5 -0
  68. wavix/cart/__init__.py +38 -0
  69. wavix/cart/client.py +327 -0
  70. wavix/cart/raw_client.py +629 -0
  71. wavix/cart/types/__init__.py +40 -0
  72. wavix/cart/types/checkout_cart_response.py +22 -0
  73. wavix/cart/types/get_cart_response.py +29 -0
  74. wavix/cart/types/remove_cart_response.py +22 -0
  75. wavix/cdrs/__init__.py +39 -0
  76. wavix/cdrs/client.py +968 -0
  77. wavix/cdrs/raw_client.py +1176 -0
  78. wavix/cdrs/transcription/__init__.py +4 -0
  79. wavix/cdrs/transcription/client.py +112 -0
  80. wavix/cdrs/transcription/raw_client.py +156 -0
  81. wavix/cdrs/types/__init__.py +38 -0
  82. wavix/cdrs/types/cdr_search_request_disposition.py +5 -0
  83. wavix/cdrs/types/cdr_search_request_type.py +5 -0
  84. wavix/client.py +578 -0
  85. wavix/core/__init__.py +127 -0
  86. wavix/core/api_error.py +23 -0
  87. wavix/core/client_wrapper.py +119 -0
  88. wavix/core/datetime_utils.py +70 -0
  89. wavix/core/file.py +67 -0
  90. wavix/core/force_multipart.py +18 -0
  91. wavix/core/http_client.py +839 -0
  92. wavix/core/http_response.py +59 -0
  93. wavix/core/http_sse/__init__.py +42 -0
  94. wavix/core/http_sse/_api.py +170 -0
  95. wavix/core/http_sse/_decoders.py +61 -0
  96. wavix/core/http_sse/_exceptions.py +7 -0
  97. wavix/core/http_sse/_models.py +17 -0
  98. wavix/core/jsonable_encoder.py +120 -0
  99. wavix/core/logging.py +107 -0
  100. wavix/core/parse_error.py +36 -0
  101. wavix/core/pydantic_utilities.py +508 -0
  102. wavix/core/query_encoder.py +58 -0
  103. wavix/core/remove_none_from_dict.py +11 -0
  104. wavix/core/request_options.py +35 -0
  105. wavix/core/serialization.py +347 -0
  106. wavix/environment.py +7 -0
  107. wavix/errors/__init__.py +56 -0
  108. wavix/errors/bad_request_error.py +10 -0
  109. wavix/errors/forbidden_error.py +10 -0
  110. wavix/errors/not_found_error.py +10 -0
  111. wavix/errors/service_unavailable_error.py +11 -0
  112. wavix/errors/too_many_requests_error.py +11 -0
  113. wavix/errors/unauthorized_error.py +11 -0
  114. wavix/errors/unprocessable_entity_error.py +10 -0
  115. wavix/link_shortener/__init__.py +34 -0
  116. wavix/link_shortener/client.py +194 -0
  117. wavix/link_shortener/metrics/__init__.py +4 -0
  118. wavix/link_shortener/metrics/client.py +198 -0
  119. wavix/link_shortener/metrics/raw_client.py +218 -0
  120. wavix/link_shortener/raw_client.py +265 -0
  121. wavix/number_validator/__init__.py +35 -0
  122. wavix/number_validator/client.py +271 -0
  123. wavix/number_validator/raw_client.py +383 -0
  124. wavix/number_validator/results/__init__.py +4 -0
  125. wavix/number_validator/results/client.py +114 -0
  126. wavix/number_validator/results/raw_client.py +156 -0
  127. wavix/number_validator/types/__init__.py +34 -0
  128. wavix/number_validator/types/get_number_validator_response.py +112 -0
  129. wavix/numbers/__init__.py +39 -0
  130. wavix/numbers/client.py +689 -0
  131. wavix/numbers/papers/__init__.py +4 -0
  132. wavix/numbers/papers/client.py +155 -0
  133. wavix/numbers/papers/raw_client.py +208 -0
  134. wavix/numbers/raw_client.py +1000 -0
  135. wavix/numbers/types/__init__.py +38 -0
  136. wavix/numbers/types/bulk_update_numbers_response.py +23 -0
  137. wavix/numbers/types/delete_numbers_response.py +22 -0
  138. wavix/profile/__init__.py +41 -0
  139. wavix/profile/client.py +308 -0
  140. wavix/profile/config/__init__.py +34 -0
  141. wavix/profile/config/client.py +100 -0
  142. wavix/profile/config/raw_client.py +124 -0
  143. wavix/profile/config/types/__init__.py +34 -0
  144. wavix/profile/config/types/get_config_response.py +25 -0
  145. wavix/profile/raw_client.py +360 -0
  146. wavix/profile/types/__init__.py +38 -0
  147. wavix/profile/types/profile_update_request_company_info.py +48 -0
  148. wavix/profile/types/profile_update_request_company_info_industry.py +22 -0
  149. wavix/py.typed +0 -0
  150. wavix/sip_trunks/__init__.py +4 -0
  151. wavix/sip_trunks/client.py +927 -0
  152. wavix/sip_trunks/raw_client.py +1324 -0
  153. wavix/sms_and_mms/__init__.py +66 -0
  154. wavix/sms_and_mms/client.py +101 -0
  155. wavix/sms_and_mms/messages/__init__.py +49 -0
  156. wavix/sms_and_mms/messages/client.py +625 -0
  157. wavix/sms_and_mms/messages/raw_client.py +793 -0
  158. wavix/sms_and_mms/messages/types/__init__.py +47 -0
  159. wavix/sms_and_mms/messages/types/get_messages_response.py +97 -0
  160. wavix/sms_and_mms/messages/types/list_all_messages_request_message_type.py +5 -0
  161. wavix/sms_and_mms/messages/types/list_messages_request_message_type.py +5 -0
  162. wavix/sms_and_mms/messages/types/list_messages_response.py +26 -0
  163. wavix/sms_and_mms/opt_outs/__init__.py +34 -0
  164. wavix/sms_and_mms/opt_outs/client.py +277 -0
  165. wavix/sms_and_mms/opt_outs/raw_client.py +438 -0
  166. wavix/sms_and_mms/opt_outs/types/__init__.py +34 -0
  167. wavix/sms_and_mms/opt_outs/types/create_opt_outs_response.py +22 -0
  168. wavix/sms_and_mms/raw_client.py +13 -0
  169. wavix/sms_and_mms/sender_ids/__init__.py +38 -0
  170. wavix/sms_and_mms/sender_ids/client.py +391 -0
  171. wavix/sms_and_mms/sender_ids/raw_client.py +617 -0
  172. wavix/sms_and_mms/sender_ids/types/__init__.py +40 -0
  173. wavix/sms_and_mms/sender_ids/types/delete_sender_ids_response.py +22 -0
  174. wavix/sms_and_mms/sender_ids/types/sender_id_create_request_monthly_volume.py +7 -0
  175. wavix/sms_and_mms/sender_ids/types/sender_id_create_request_usecase.py +5 -0
  176. wavix/speech_analytics/__init__.py +52 -0
  177. wavix/speech_analytics/client.py +372 -0
  178. wavix/speech_analytics/file/__init__.py +4 -0
  179. wavix/speech_analytics/file/client.py +114 -0
  180. wavix/speech_analytics/file/raw_client.py +148 -0
  181. wavix/speech_analytics/raw_client.py +527 -0
  182. wavix/speech_analytics/types/__init__.py +47 -0
  183. wavix/speech_analytics/types/create_speech_analytics_response.py +32 -0
  184. wavix/speech_analytics/types/get_speech_analytics_response.py +77 -0
  185. wavix/speech_analytics/types/get_speech_analytics_response_language.py +5 -0
  186. wavix/speech_analytics/types/get_speech_analytics_response_status.py +5 -0
  187. wavix/sub_accounts/__init__.py +52 -0
  188. wavix/sub_accounts/client.py +442 -0
  189. wavix/sub_accounts/raw_client.py +775 -0
  190. wavix/sub_accounts/transactions/__init__.py +4 -0
  191. wavix/sub_accounts/transactions/client.py +198 -0
  192. wavix/sub_accounts/transactions/raw_client.py +265 -0
  193. wavix/sub_accounts/types/__init__.py +47 -0
  194. wavix/sub_accounts/types/list_sub_accounts_request_status.py +5 -0
  195. wavix/sub_accounts/types/sub_accounts_create_request_default_destinations.py +31 -0
  196. wavix/sub_accounts/types/sub_accounts_update_request_default_destinations.py +31 -0
  197. wavix/sub_accounts/types/sub_accounts_update_request_status.py +5 -0
  198. wavix/ten_dlc/__init__.py +167 -0
  199. wavix/ten_dlc/brand_appeals/__init__.py +34 -0
  200. wavix/ten_dlc/brand_appeals/client.py +244 -0
  201. wavix/ten_dlc/brand_appeals/raw_client.py +390 -0
  202. wavix/ten_dlc/brand_appeals/types/__init__.py +34 -0
  203. wavix/ten_dlc/brand_appeals/types/create_brand_appeals_response.py +22 -0
  204. wavix/ten_dlc/brand_evidence/__init__.py +37 -0
  205. wavix/ten_dlc/brand_evidence/client.py +365 -0
  206. wavix/ten_dlc/brand_evidence/raw_client.py +599 -0
  207. wavix/ten_dlc/brand_evidence/types/__init__.py +38 -0
  208. wavix/ten_dlc/brand_evidence/types/delete_brand_evidence_response.py +22 -0
  209. wavix/ten_dlc/brand_evidence/types/upload_brand_evidence_response.py +38 -0
  210. wavix/ten_dlc/brand_vetting_appeals/__init__.py +34 -0
  211. wavix/ten_dlc/brand_vetting_appeals/client.py +258 -0
  212. wavix/ten_dlc/brand_vetting_appeals/raw_client.py +381 -0
  213. wavix/ten_dlc/brand_vetting_appeals/types/__init__.py +36 -0
  214. wavix/ten_dlc/brand_vetting_appeals/types/create_brand_vetting_appeals_response.py +22 -0
  215. wavix/ten_dlc/brand_vettings/__init__.py +4 -0
  216. wavix/ten_dlc/brand_vettings/client.py +325 -0
  217. wavix/ten_dlc/brand_vettings/raw_client.py +518 -0
  218. wavix/ten_dlc/brands/__init__.py +85 -0
  219. wavix/ten_dlc/brands/client.py +870 -0
  220. wavix/ten_dlc/brands/raw_client.py +1263 -0
  221. wavix/ten_dlc/brands/types/__init__.py +83 -0
  222. wavix/ten_dlc/brands/types/create_brands_response.py +143 -0
  223. wavix/ten_dlc/brands/types/create_brands_response_entity_type.py +7 -0
  224. wavix/ten_dlc/brands/types/create_brands_response_status.py +7 -0
  225. wavix/ten_dlc/brands/types/delete_brands_response.py +22 -0
  226. wavix/ten_dlc/brands/types/get_brands_response.py +143 -0
  227. wavix/ten_dlc/brands/types/get_brands_response_entity_type.py +7 -0
  228. wavix/ten_dlc/brands/types/get_brands_response_status.py +7 -0
  229. wavix/ten_dlc/brands/types/list_brands_response.py +33 -0
  230. wavix/ten_dlc/brands/types/list_brands_response_pagination.py +41 -0
  231. wavix/ten_dlc/brands/types/qualify_usecase_brands_request_use_case.py +35 -0
  232. wavix/ten_dlc/brands/types/qualify_usecase_brands_response.py +33 -0
  233. wavix/ten_dlc/brands/types/ten_dlc_brand_update_request_entity_type.py +7 -0
  234. wavix/ten_dlc/brands/types/ten_dlc_brand_update_request_vertical.py +18 -0
  235. wavix/ten_dlc/brands/types/update_brands_response.py +143 -0
  236. wavix/ten_dlc/brands/types/update_brands_response_entity_type.py +7 -0
  237. wavix/ten_dlc/brands/types/update_brands_response_status.py +7 -0
  238. wavix/ten_dlc/campaign_numbers/__init__.py +38 -0
  239. wavix/ten_dlc/campaign_numbers/client.py +304 -0
  240. wavix/ten_dlc/campaign_numbers/raw_client.py +448 -0
  241. wavix/ten_dlc/campaign_numbers/types/__init__.py +40 -0
  242. wavix/ten_dlc/campaign_numbers/types/link_campaign_numbers_response.py +22 -0
  243. wavix/ten_dlc/campaign_numbers/types/list_campaign_numbers_response.py +33 -0
  244. wavix/ten_dlc/campaign_numbers/types/unlink_campaign_numbers_response.py +22 -0
  245. wavix/ten_dlc/campaigns/__init__.py +64 -0
  246. wavix/ten_dlc/campaigns/client.py +1493 -0
  247. wavix/ten_dlc/campaigns/raw_client.py +1840 -0
  248. wavix/ten_dlc/campaigns/types/__init__.py +62 -0
  249. wavix/ten_dlc/campaigns/types/create_campaigns_response.py +211 -0
  250. wavix/ten_dlc/campaigns/types/delete_campaigns_response.py +22 -0
  251. wavix/ten_dlc/campaigns/types/get_campaigns_response.py +211 -0
  252. wavix/ten_dlc/campaigns/types/list_by_brand_campaigns_response.py +33 -0
  253. wavix/ten_dlc/campaigns/types/list_by_brand_campaigns_response_pagination.py +41 -0
  254. wavix/ten_dlc/campaigns/types/list_campaigns_response.py +33 -0
  255. wavix/ten_dlc/campaigns/types/list_campaigns_response_pagination.py +41 -0
  256. wavix/ten_dlc/campaigns/types/ten_dlc_campaign_update_request_usecase.py +15 -0
  257. wavix/ten_dlc/campaigns/types/update_campaigns_response.py +211 -0
  258. wavix/ten_dlc/client.py +196 -0
  259. wavix/ten_dlc/raw_client.py +13 -0
  260. wavix/ten_dlc/subscriptions/__init__.py +37 -0
  261. wavix/ten_dlc/subscriptions/client.py +271 -0
  262. wavix/ten_dlc/subscriptions/raw_client.py +398 -0
  263. wavix/ten_dlc/subscriptions/types/__init__.py +38 -0
  264. wavix/ten_dlc/subscriptions/types/create_subscriptions_response.py +31 -0
  265. wavix/ten_dlc/subscriptions/types/delete_subscriptions_response.py +22 -0
  266. wavix/two_fa/__init__.py +56 -0
  267. wavix/two_fa/client.py +101 -0
  268. wavix/two_fa/events/__init__.py +4 -0
  269. wavix/two_fa/events/client.py +114 -0
  270. wavix/two_fa/events/raw_client.py +156 -0
  271. wavix/two_fa/raw_client.py +13 -0
  272. wavix/two_fa/sessions/__init__.py +4 -0
  273. wavix/two_fa/sessions/client.py +142 -0
  274. wavix/two_fa/sessions/raw_client.py +200 -0
  275. wavix/two_fa/verification/__init__.py +49 -0
  276. wavix/two_fa/verification/client.py +395 -0
  277. wavix/two_fa/verification/raw_client.py +664 -0
  278. wavix/two_fa/verification/types/__init__.py +47 -0
  279. wavix/two_fa/verification/types/check_verification_response.py +22 -0
  280. wavix/two_fa/verification/types/create_verification_response.py +51 -0
  281. wavix/two_fa/verification/types/resend_verification_response.py +38 -0
  282. wavix/two_fa/verification/types/two_factor_verification_resend_request_channel.py +5 -0
  283. wavix/types/__init__.py +637 -0
  284. wavix/types/account_error_response.py +31 -0
  285. wavix/types/account_limits.py +32 -0
  286. wavix/types/allowed_i_ps.py +7 -0
  287. wavix/types/allowed_i_ps_item.py +27 -0
  288. wavix/types/api_key.py +138 -0
  289. wavix/types/api_key_calls_scope_permission.py +30 -0
  290. wavix/types/api_key_calls_scope_permission_allow.py +5 -0
  291. wavix/types/api_key_scope_permission.py +30 -0
  292. wavix/types/api_key_scope_permission_allow.py +5 -0
  293. wavix/types/available_number.py +97 -0
  294. wavix/types/available_number_list_response.py +26 -0
  295. wavix/types/bad_request_error_body.py +27 -0
  296. wavix/types/billing_transaction_list_response.py +31 -0
  297. wavix/types/brand_status_updated_webhook.py +28 -0
  298. wavix/types/brand_status_updated_webhook_status.py +7 -0
  299. wavix/types/call.py +92 -0
  300. wavix/types/call_control_validation_error_response.py +34 -0
  301. wavix/types/call_create_response.py +92 -0
  302. wavix/types/call_create_response_event_type.py +18 -0
  303. wavix/types/call_direction.py +5 -0
  304. wavix/types/call_disposition.py +5 -0
  305. wavix/types/call_event_type.py +18 -0
  306. wavix/types/call_list_response.py +28 -0
  307. wavix/types/call_recording_list_response.py +28 -0
  308. wavix/types/call_response.py +24 -0
  309. wavix/types/call_status_webhook.py +70 -0
  310. wavix/types/call_status_webhook_direction.py +5 -0
  311. wavix/types/call_stream_channel.py +5 -0
  312. wavix/types/call_stream_response.py +27 -0
  313. wavix/types/call_stream_type.py +5 -0
  314. wavix/types/call_webhook.py +37 -0
  315. wavix/types/call_webhook_event_type.py +5 -0
  316. wavix/types/call_webhook_list_response.py +10 -0
  317. wavix/types/call_webhook_list_response_item.py +28 -0
  318. wavix/types/call_webhook_list_response_item_event_type.py +5 -0
  319. wavix/types/campaign_status_updated_webhook.py +41 -0
  320. wavix/types/campaign_status_updated_webhook_status.py +7 -0
  321. wavix/types/cart_response.py +29 -0
  322. wavix/types/cdr.py +97 -0
  323. wavix/types/cdr_list_response.py +26 -0
  324. wavix/types/cdr_response.py +104 -0
  325. wavix/types/cdr_transcription_completed_webhook.py +28 -0
  326. wavix/types/cdr_transcription_completed_webhook_status.py +5 -0
  327. wavix/types/cdr_transcription_response.py +74 -0
  328. wavix/types/cdr_transcription_search_response.py +26 -0
  329. wavix/types/cdr_with_transcription.py +97 -0
  330. wavix/types/city.py +32 -0
  331. wavix/types/city_list_response.py +23 -0
  332. wavix/types/country.py +32 -0
  333. wavix/types/country_has_no_regions_error_response.py +27 -0
  334. wavix/types/country_list_response.py +23 -0
  335. wavix/types/document_type.py +32 -0
  336. wavix/types/document_type_id.py +7 -0
  337. wavix/types/file_transcript_response.py +30 -0
  338. wavix/types/file_transcript_turn.py +46 -0
  339. wavix/types/file_transcription_completed_webhook.py +32 -0
  340. wavix/types/file_transcription_response.py +77 -0
  341. wavix/types/file_transcription_response_language.py +5 -0
  342. wavix/types/file_transcription_response_status.py +5 -0
  343. wavix/types/financial_transaction.py +57 -0
  344. wavix/types/forbidden_error_response.py +27 -0
  345. wavix/types/inbound_call_destination.py +53 -0
  346. wavix/types/inbound_call_transport.py +6 -0
  347. wavix/types/inbound_message.py +46 -0
  348. wavix/types/invalid_recording.py +31 -0
  349. wavix/types/invoice.py +42 -0
  350. wavix/types/invoice_list_response.py +31 -0
  351. wavix/types/list_brand_evidence_response.py +23 -0
  352. wavix/types/list_sessions_response_item.py +58 -0
  353. wavix/types/message.py +103 -0
  354. wavix/types/message_body.py +29 -0
  355. wavix/types/message_create_request.py +46 -0
  356. wavix/types/message_delivery_status.py +8 -0
  357. wavix/types/message_list_response.py +26 -0
  358. wavix/types/message_response.py +97 -0
  359. wavix/types/messages_delivery_report.py +81 -0
  360. wavix/types/not_found_error_body.py +27 -0
  361. wavix/types/not_found_error_response.py +27 -0
  362. wavix/types/number.py +160 -0
  363. wavix/types/number_destination.py +38 -0
  364. wavix/types/number_document.py +58 -0
  365. wavix/types/number_list_response.py +32 -0
  366. wavix/types/number_status_updated_webhook.py +38 -0
  367. wavix/types/number_status_updated_webhook_status.py +5 -0
  368. wavix/types/number_validator_create_bulk_response.py +10 -0
  369. wavix/types/number_validator_create_bulk_response_request_id.py +26 -0
  370. wavix/types/on_call_event_payload.py +34 -0
  371. wavix/types/on_call_event_payload_type.py +5 -0
  372. wavix/types/opt_out.py +27 -0
  373. wavix/types/opt_out_item.py +38 -0
  374. wavix/types/opt_outs_list_response.py +26 -0
  375. wavix/types/pagination.py +37 -0
  376. wavix/types/phone_lookup_details.py +32 -0
  377. wavix/types/phone_number_validation_type.py +5 -0
  378. wavix/types/phone_validation_batch_response.py +38 -0
  379. wavix/types/phone_validation_batch_result_response.py +41 -0
  380. wavix/types/phone_validation_response.py +112 -0
  381. wavix/types/phone_validation_result_response.py +115 -0
  382. wavix/types/profile_config_response.py +25 -0
  383. wavix/types/profile_response.py +79 -0
  384. wavix/types/profile_response_company_info.py +53 -0
  385. wavix/types/profile_response_company_info_country.py +31 -0
  386. wavix/types/profile_response_company_info_industry.py +22 -0
  387. wavix/types/profile_response_default_destinations_item.py +27 -0
  388. wavix/types/record_not_found_error_response.py +27 -0
  389. wavix/types/recording.py +57 -0
  390. wavix/types/recording_deleted_error_response.py +38 -0
  391. wavix/types/region.py +31 -0
  392. wavix/types/region_list_response.py +23 -0
  393. wavix/types/send_messages_response.py +100 -0
  394. wavix/types/sender_id.py +48 -0
  395. wavix/types/sender_id_details.py +44 -0
  396. wavix/types/sender_id_list_response.py +23 -0
  397. wavix/types/sender_id_response.py +48 -0
  398. wavix/types/sender_id_response_type.py +5 -0
  399. wavix/types/sender_id_type.py +5 -0
  400. wavix/types/short_link_metrics_item.py +69 -0
  401. wavix/types/short_link_metrics_response.py +26 -0
  402. wavix/types/short_link_response.py +22 -0
  403. wavix/types/sip_trunk_create_request.py +132 -0
  404. wavix/types/sip_trunk_create_request_allowed_ips_item.py +22 -0
  405. wavix/types/sip_trunk_create_request_host_request.py +26 -0
  406. wavix/types/sip_trunk_list_response.py +26 -0
  407. wavix/types/sip_trunk_response.py +145 -0
  408. wavix/types/sip_trunk_summary.py +114 -0
  409. wavix/types/sip_trunk_summary_host_request.py +31 -0
  410. wavix/types/sub_accounts_list_response.py +26 -0
  411. wavix/types/sub_accounts_transactions_list_response.py +30 -0
  412. wavix/types/sub_accounts_transactions_list_response_transactions_item.py +48 -0
  413. wavix/types/sub_organization_response.py +59 -0
  414. wavix/types/sub_organization_response_default_destinations.py +31 -0
  415. wavix/types/sub_organization_response_status.py +5 -0
  416. wavix/types/submit_file_transcription_response.py +32 -0
  417. wavix/types/success_response.py +22 -0
  418. wavix/types/tcr_error_message.py +27 -0
  419. wavix/types/tcr_feedback.py +23 -0
  420. wavix/types/tcr_feedback_category.py +47 -0
  421. wavix/types/ten_dlc_brand.py +143 -0
  422. wavix/types/ten_dlc_brand_appeal.py +54 -0
  423. wavix/types/ten_dlc_brand_appeal_create_request.py +36 -0
  424. wavix/types/ten_dlc_brand_appeal_outcome.py +38 -0
  425. wavix/types/ten_dlc_brand_appeal_outcome_feedback.py +27 -0
  426. wavix/types/ten_dlc_brand_appeal_outcome_vetting_status.py +7 -0
  427. wavix/types/ten_dlc_brand_create_request.py +8 -0
  428. wavix/types/ten_dlc_brand_create_request_entity_type.py +7 -0
  429. wavix/types/ten_dlc_brand_create_request_stock_exchange.py +26 -0
  430. wavix/types/ten_dlc_brand_create_request_stock_exchange_entity_type.py +7 -0
  431. wavix/types/ten_dlc_brand_create_request_vertical.py +18 -0
  432. wavix/types/ten_dlc_brand_create_request_zero.py +24 -0
  433. wavix/types/ten_dlc_brand_create_request_zero_entity_type.py +5 -0
  434. wavix/types/ten_dlc_brand_entity_type.py +7 -0
  435. wavix/types/ten_dlc_brand_evidence.py +38 -0
  436. wavix/types/ten_dlc_brand_identity_verification_status.py +7 -0
  437. wavix/types/ten_dlc_brand_list_response.py +33 -0
  438. wavix/types/ten_dlc_brand_list_response_pagination.py +41 -0
  439. wavix/types/ten_dlc_brand_qualification_result.py +33 -0
  440. wavix/types/ten_dlc_brand_status.py +7 -0
  441. wavix/types/ten_dlc_brand_vetting.py +71 -0
  442. wavix/types/ten_dlc_brand_vetting_appeal.py +78 -0
  443. wavix/types/ten_dlc_brand_vetting_appeal_appeal_outcome.py +37 -0
  444. wavix/types/ten_dlc_brand_vetting_appeal_appeal_outcome_feedback.py +26 -0
  445. wavix/types/ten_dlc_brand_vetting_appeal_outcome.py +33 -0
  446. wavix/types/ten_dlc_brand_vetting_appeal_outcome_feedback.py +26 -0
  447. wavix/types/ten_dlc_brand_vetting_appeal_outcome_reason.py +22 -0
  448. wavix/types/ten_dlc_campaign.py +211 -0
  449. wavix/types/ten_dlc_campaign_list_response.py +33 -0
  450. wavix/types/ten_dlc_campaign_list_response_pagination.py +41 -0
  451. wavix/types/ten_dlc_campaign_nudge_request.py +32 -0
  452. wavix/types/ten_dlc_campaign_number.py +27 -0
  453. wavix/types/ten_dlc_campaign_number_list_response.py +33 -0
  454. wavix/types/ten_dlc_event_subscription.py +31 -0
  455. wavix/types/ten_dlcmno_metadata.py +101 -0
  456. wavix/types/transaction_status.py +5 -0
  457. wavix/types/transaction_type.py +50 -0
  458. wavix/types/transcript_turn.py +46 -0
  459. wavix/types/transcription_filter.py +35 -0
  460. wavix/types/transcription_filter_agent.py +36 -0
  461. wavix/types/transcription_filter_any.py +36 -0
  462. wavix/types/transcription_filter_client.py +36 -0
  463. wavix/types/transcription_language.py +5 -0
  464. wavix/types/transcription_reference.py +29 -0
  465. wavix/types/transcription_status.py +5 -0
  466. wavix/types/tts_language.py +5 -0
  467. wavix/types/tts_voice_id.py +25 -0
  468. wavix/types/two_factor_verification_check_response.py +22 -0
  469. wavix/types/two_factor_verification_event.py +47 -0
  470. wavix/types/two_factor_verification_resend_response.py +38 -0
  471. wavix/types/two_factor_verification_response.py +51 -0
  472. wavix/types/unauthorized_error_response.py +32 -0
  473. wavix/types/unprocessable_entity_error_body.py +27 -0
  474. wavix/types/validation_error_response.py +27 -0
  475. wavix/types/voice_campaign_create_request.py +20 -0
  476. wavix/types/voice_campaign_response.py +41 -0
  477. wavix/types/voice_campaigns_create_response.py +20 -0
  478. wavix/types/voice_campaigns_create_response_voice_campaign.py +43 -0
  479. wavix/types/voice_campaigns_get_response.py +20 -0
  480. wavix/types/voice_campaigns_get_response_voice_campaign.py +43 -0
  481. wavix/types/web_rtc_token.py +43 -0
  482. wavix/types/web_rtc_token_response.py +44 -0
  483. wavix/types/web_rtc_tokens_list_response.py +30 -0
  484. wavix/version.py +3 -0
  485. wavix/voice_campaigns/__init__.py +4 -0
  486. wavix/voice_campaigns/client.py +197 -0
  487. wavix/voice_campaigns/raw_client.py +332 -0
  488. wavix/webrtc/__init__.py +34 -0
  489. wavix/webrtc/client.py +63 -0
  490. wavix/webrtc/raw_client.py +13 -0
  491. wavix/webrtc/tokens/__init__.py +4 -0
  492. wavix/webrtc/tokens/client.py +432 -0
  493. wavix/webrtc/tokens/raw_client.py +869 -0
  494. wavix_python_sdk-1.0.0.dist-info/LICENSE +21 -0
  495. wavix_python_sdk-1.0.0.dist-info/METADATA +339 -0
  496. wavix_python_sdk-1.0.0.dist-info/RECORD +497 -0
  497. wavix_python_sdk-1.0.0.dist-info/WHEEL +4 -0
@@ -0,0 +1,4 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ # isort: skip_file
4
+
@@ -0,0 +1,250 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
6
+ from ...core.request_options import RequestOptions
7
+ from ...types.call_stream_channel import CallStreamChannel
8
+ from ...types.call_stream_response import CallStreamResponse
9
+ from ...types.call_stream_type import CallStreamType
10
+ from ...types.success_response import SuccessResponse
11
+ from .raw_client import AsyncRawStreamsClient, RawStreamsClient
12
+
13
+ # this is used as the default value for optional parameters
14
+ OMIT = typing.cast(typing.Any, ...)
15
+
16
+
17
+ class StreamsClient:
18
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
19
+ self._raw_client = RawStreamsClient(client_wrapper=client_wrapper)
20
+
21
+ @property
22
+ def with_raw_response(self) -> RawStreamsClient:
23
+ """
24
+ Retrieves a raw implementation of this client that returns raw responses.
25
+
26
+ Returns
27
+ -------
28
+ RawStreamsClient
29
+ """
30
+ return self._raw_client
31
+
32
+ def create(
33
+ self,
34
+ call_id: str,
35
+ *,
36
+ stream_url: str,
37
+ stream_type: CallStreamType,
38
+ stream_channel: CallStreamChannel,
39
+ request_options: typing.Optional[RequestOptions] = None,
40
+ ) -> CallStreamResponse:
41
+ """
42
+ Starts streaming the media of the call identified by `call_id` to the configured destination. Returns the `stream_id`.
43
+
44
+ Parameters
45
+ ----------
46
+ call_id : str
47
+ The `uuid` of the call.
48
+
49
+ stream_url : str
50
+ WebSocket URL for call streaming
51
+
52
+ stream_type : CallStreamType
53
+ Direction of audio streamed to `stream_url`.
54
+
55
+ stream_channel : CallStreamChannel
56
+ Audio channel streamed to `stream_url`.
57
+
58
+ request_options : typing.Optional[RequestOptions]
59
+ Request-specific configuration.
60
+
61
+ Returns
62
+ -------
63
+ CallStreamResponse
64
+ Returns the created media stream, including its `stream_id`.
65
+
66
+ Examples
67
+ --------
68
+ from wavix import Wavix
69
+
70
+ client = Wavix(
71
+ token="YOUR_TOKEN",
72
+ )
73
+ client.call_control.streams.create(
74
+ call_id="call_id",
75
+ stream_url="wss://examples.com/stream",
76
+ stream_type="oneway",
77
+ stream_channel="inbound",
78
+ )
79
+ """
80
+ _response = self._raw_client.create(
81
+ call_id,
82
+ stream_url=stream_url,
83
+ stream_type=stream_type,
84
+ stream_channel=stream_channel,
85
+ request_options=request_options,
86
+ )
87
+ return _response.data
88
+
89
+ def delete(
90
+ self, call_id: str, id: str, *, request_options: typing.Optional[RequestOptions] = None
91
+ ) -> SuccessResponse:
92
+ """
93
+ Stops the media stream identified by `id` on the call identified by `call_id`.
94
+
95
+ Parameters
96
+ ----------
97
+ call_id : str
98
+ The `uuid` of the call.
99
+
100
+ id : str
101
+ The `uuid` of the media stream to stop.
102
+
103
+ request_options : typing.Optional[RequestOptions]
104
+ Request-specific configuration.
105
+
106
+ Returns
107
+ -------
108
+ SuccessResponse
109
+ Returns a success confirmation. The media stream is stopped.
110
+
111
+ Examples
112
+ --------
113
+ from wavix import Wavix
114
+
115
+ client = Wavix(
116
+ token="YOUR_TOKEN",
117
+ )
118
+ client.call_control.streams.delete(
119
+ call_id="call_id",
120
+ id="id",
121
+ )
122
+ """
123
+ _response = self._raw_client.delete(call_id, id, request_options=request_options)
124
+ return _response.data
125
+
126
+
127
+ class AsyncStreamsClient:
128
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
129
+ self._raw_client = AsyncRawStreamsClient(client_wrapper=client_wrapper)
130
+
131
+ @property
132
+ def with_raw_response(self) -> AsyncRawStreamsClient:
133
+ """
134
+ Retrieves a raw implementation of this client that returns raw responses.
135
+
136
+ Returns
137
+ -------
138
+ AsyncRawStreamsClient
139
+ """
140
+ return self._raw_client
141
+
142
+ async def create(
143
+ self,
144
+ call_id: str,
145
+ *,
146
+ stream_url: str,
147
+ stream_type: CallStreamType,
148
+ stream_channel: CallStreamChannel,
149
+ request_options: typing.Optional[RequestOptions] = None,
150
+ ) -> CallStreamResponse:
151
+ """
152
+ Starts streaming the media of the call identified by `call_id` to the configured destination. Returns the `stream_id`.
153
+
154
+ Parameters
155
+ ----------
156
+ call_id : str
157
+ The `uuid` of the call.
158
+
159
+ stream_url : str
160
+ WebSocket URL for call streaming
161
+
162
+ stream_type : CallStreamType
163
+ Direction of audio streamed to `stream_url`.
164
+
165
+ stream_channel : CallStreamChannel
166
+ Audio channel streamed to `stream_url`.
167
+
168
+ request_options : typing.Optional[RequestOptions]
169
+ Request-specific configuration.
170
+
171
+ Returns
172
+ -------
173
+ CallStreamResponse
174
+ Returns the created media stream, including its `stream_id`.
175
+
176
+ Examples
177
+ --------
178
+ import asyncio
179
+
180
+ from wavix import AsyncWavix
181
+
182
+ client = AsyncWavix(
183
+ token="YOUR_TOKEN",
184
+ )
185
+
186
+
187
+ async def main() -> None:
188
+ await client.call_control.streams.create(
189
+ call_id="call_id",
190
+ stream_url="wss://examples.com/stream",
191
+ stream_type="oneway",
192
+ stream_channel="inbound",
193
+ )
194
+
195
+
196
+ asyncio.run(main())
197
+ """
198
+ _response = await self._raw_client.create(
199
+ call_id,
200
+ stream_url=stream_url,
201
+ stream_type=stream_type,
202
+ stream_channel=stream_channel,
203
+ request_options=request_options,
204
+ )
205
+ return _response.data
206
+
207
+ async def delete(
208
+ self, call_id: str, id: str, *, request_options: typing.Optional[RequestOptions] = None
209
+ ) -> SuccessResponse:
210
+ """
211
+ Stops the media stream identified by `id` on the call identified by `call_id`.
212
+
213
+ Parameters
214
+ ----------
215
+ call_id : str
216
+ The `uuid` of the call.
217
+
218
+ id : str
219
+ The `uuid` of the media stream to stop.
220
+
221
+ request_options : typing.Optional[RequestOptions]
222
+ Request-specific configuration.
223
+
224
+ Returns
225
+ -------
226
+ SuccessResponse
227
+ Returns a success confirmation. The media stream is stopped.
228
+
229
+ Examples
230
+ --------
231
+ import asyncio
232
+
233
+ from wavix import AsyncWavix
234
+
235
+ client = AsyncWavix(
236
+ token="YOUR_TOKEN",
237
+ )
238
+
239
+
240
+ async def main() -> None:
241
+ await client.call_control.streams.delete(
242
+ call_id="call_id",
243
+ id="id",
244
+ )
245
+
246
+
247
+ asyncio.run(main())
248
+ """
249
+ _response = await self._raw_client.delete(call_id, id, request_options=request_options)
250
+ return _response.data
@@ -0,0 +1,325 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+ from json.decoder import JSONDecodeError
5
+
6
+ from ...core.api_error import ApiError
7
+ from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
8
+ from ...core.http_response import AsyncHttpResponse, HttpResponse
9
+ from ...core.jsonable_encoder import encode_path_param
10
+ from ...core.parse_error import ParsingError
11
+ from ...core.pydantic_utilities import parse_obj_as
12
+ from ...core.request_options import RequestOptions
13
+ from ...errors.bad_request_error import BadRequestError
14
+ from ...errors.unauthorized_error import UnauthorizedError
15
+ from ...types.call_stream_channel import CallStreamChannel
16
+ from ...types.call_stream_response import CallStreamResponse
17
+ from ...types.call_stream_type import CallStreamType
18
+ from ...types.success_response import SuccessResponse
19
+ from ...types.unauthorized_error_response import UnauthorizedErrorResponse
20
+ from pydantic import ValidationError
21
+
22
+ # this is used as the default value for optional parameters
23
+ OMIT = typing.cast(typing.Any, ...)
24
+
25
+
26
+ class RawStreamsClient:
27
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
28
+ self._client_wrapper = client_wrapper
29
+
30
+ def create(
31
+ self,
32
+ call_id: str,
33
+ *,
34
+ stream_url: str,
35
+ stream_type: CallStreamType,
36
+ stream_channel: CallStreamChannel,
37
+ request_options: typing.Optional[RequestOptions] = None,
38
+ ) -> HttpResponse[CallStreamResponse]:
39
+ """
40
+ Starts streaming the media of the call identified by `call_id` to the configured destination. Returns the `stream_id`.
41
+
42
+ Parameters
43
+ ----------
44
+ call_id : str
45
+ The `uuid` of the call.
46
+
47
+ stream_url : str
48
+ WebSocket URL for call streaming
49
+
50
+ stream_type : CallStreamType
51
+ Direction of audio streamed to `stream_url`.
52
+
53
+ stream_channel : CallStreamChannel
54
+ Audio channel streamed to `stream_url`.
55
+
56
+ request_options : typing.Optional[RequestOptions]
57
+ Request-specific configuration.
58
+
59
+ Returns
60
+ -------
61
+ HttpResponse[CallStreamResponse]
62
+ Returns the created media stream, including its `stream_id`.
63
+ """
64
+ _response = self._client_wrapper.httpx_client.request(
65
+ f"v1/calls/{encode_path_param(call_id)}/streams",
66
+ method="POST",
67
+ json={
68
+ "stream_url": stream_url,
69
+ "stream_type": stream_type,
70
+ "stream_channel": stream_channel,
71
+ },
72
+ headers={
73
+ "content-type": "application/json",
74
+ },
75
+ request_options=request_options,
76
+ omit=OMIT,
77
+ )
78
+ try:
79
+ if 200 <= _response.status_code < 300:
80
+ _data = typing.cast(
81
+ CallStreamResponse,
82
+ parse_obj_as(
83
+ type_=CallStreamResponse, # type: ignore
84
+ object_=_response.json(),
85
+ ),
86
+ )
87
+ return HttpResponse(response=_response, data=_data)
88
+ if _response.status_code == 400:
89
+ raise BadRequestError(
90
+ headers=dict(_response.headers),
91
+ body=typing.cast(
92
+ typing.Any,
93
+ parse_obj_as(
94
+ type_=typing.Any, # type: ignore
95
+ object_=_response.json(),
96
+ ),
97
+ ),
98
+ )
99
+ if _response.status_code == 401:
100
+ raise UnauthorizedError(
101
+ headers=dict(_response.headers),
102
+ body=typing.cast(
103
+ UnauthorizedErrorResponse,
104
+ parse_obj_as(
105
+ type_=UnauthorizedErrorResponse, # type: ignore
106
+ object_=_response.json(),
107
+ ),
108
+ ),
109
+ )
110
+ _response_json = _response.json()
111
+ except JSONDecodeError:
112
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
113
+ except ValidationError as e:
114
+ raise ParsingError(
115
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
116
+ )
117
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
118
+
119
+ def delete(
120
+ self, call_id: str, id: str, *, request_options: typing.Optional[RequestOptions] = None
121
+ ) -> HttpResponse[SuccessResponse]:
122
+ """
123
+ Stops the media stream identified by `id` on the call identified by `call_id`.
124
+
125
+ Parameters
126
+ ----------
127
+ call_id : str
128
+ The `uuid` of the call.
129
+
130
+ id : str
131
+ The `uuid` of the media stream to stop.
132
+
133
+ request_options : typing.Optional[RequestOptions]
134
+ Request-specific configuration.
135
+
136
+ Returns
137
+ -------
138
+ HttpResponse[SuccessResponse]
139
+ Returns a success confirmation. The media stream is stopped.
140
+ """
141
+ _response = self._client_wrapper.httpx_client.request(
142
+ f"v1/calls/{encode_path_param(call_id)}/streams/{encode_path_param(id)}",
143
+ method="DELETE",
144
+ request_options=request_options,
145
+ )
146
+ try:
147
+ if 200 <= _response.status_code < 300:
148
+ _data = typing.cast(
149
+ SuccessResponse,
150
+ parse_obj_as(
151
+ type_=SuccessResponse, # type: ignore
152
+ object_=_response.json(),
153
+ ),
154
+ )
155
+ return HttpResponse(response=_response, data=_data)
156
+ if _response.status_code == 401:
157
+ raise UnauthorizedError(
158
+ headers=dict(_response.headers),
159
+ body=typing.cast(
160
+ UnauthorizedErrorResponse,
161
+ parse_obj_as(
162
+ type_=UnauthorizedErrorResponse, # type: ignore
163
+ object_=_response.json(),
164
+ ),
165
+ ),
166
+ )
167
+ _response_json = _response.json()
168
+ except JSONDecodeError:
169
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
170
+ except ValidationError as e:
171
+ raise ParsingError(
172
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
173
+ )
174
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
175
+
176
+
177
+ class AsyncRawStreamsClient:
178
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
179
+ self._client_wrapper = client_wrapper
180
+
181
+ async def create(
182
+ self,
183
+ call_id: str,
184
+ *,
185
+ stream_url: str,
186
+ stream_type: CallStreamType,
187
+ stream_channel: CallStreamChannel,
188
+ request_options: typing.Optional[RequestOptions] = None,
189
+ ) -> AsyncHttpResponse[CallStreamResponse]:
190
+ """
191
+ Starts streaming the media of the call identified by `call_id` to the configured destination. Returns the `stream_id`.
192
+
193
+ Parameters
194
+ ----------
195
+ call_id : str
196
+ The `uuid` of the call.
197
+
198
+ stream_url : str
199
+ WebSocket URL for call streaming
200
+
201
+ stream_type : CallStreamType
202
+ Direction of audio streamed to `stream_url`.
203
+
204
+ stream_channel : CallStreamChannel
205
+ Audio channel streamed to `stream_url`.
206
+
207
+ request_options : typing.Optional[RequestOptions]
208
+ Request-specific configuration.
209
+
210
+ Returns
211
+ -------
212
+ AsyncHttpResponse[CallStreamResponse]
213
+ Returns the created media stream, including its `stream_id`.
214
+ """
215
+ _response = await self._client_wrapper.httpx_client.request(
216
+ f"v1/calls/{encode_path_param(call_id)}/streams",
217
+ method="POST",
218
+ json={
219
+ "stream_url": stream_url,
220
+ "stream_type": stream_type,
221
+ "stream_channel": stream_channel,
222
+ },
223
+ headers={
224
+ "content-type": "application/json",
225
+ },
226
+ request_options=request_options,
227
+ omit=OMIT,
228
+ )
229
+ try:
230
+ if 200 <= _response.status_code < 300:
231
+ _data = typing.cast(
232
+ CallStreamResponse,
233
+ parse_obj_as(
234
+ type_=CallStreamResponse, # type: ignore
235
+ object_=_response.json(),
236
+ ),
237
+ )
238
+ return AsyncHttpResponse(response=_response, data=_data)
239
+ if _response.status_code == 400:
240
+ raise BadRequestError(
241
+ headers=dict(_response.headers),
242
+ body=typing.cast(
243
+ typing.Any,
244
+ parse_obj_as(
245
+ type_=typing.Any, # type: ignore
246
+ object_=_response.json(),
247
+ ),
248
+ ),
249
+ )
250
+ if _response.status_code == 401:
251
+ raise UnauthorizedError(
252
+ headers=dict(_response.headers),
253
+ body=typing.cast(
254
+ UnauthorizedErrorResponse,
255
+ parse_obj_as(
256
+ type_=UnauthorizedErrorResponse, # type: ignore
257
+ object_=_response.json(),
258
+ ),
259
+ ),
260
+ )
261
+ _response_json = _response.json()
262
+ except JSONDecodeError:
263
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
264
+ except ValidationError as e:
265
+ raise ParsingError(
266
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
267
+ )
268
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
269
+
270
+ async def delete(
271
+ self, call_id: str, id: str, *, request_options: typing.Optional[RequestOptions] = None
272
+ ) -> AsyncHttpResponse[SuccessResponse]:
273
+ """
274
+ Stops the media stream identified by `id` on the call identified by `call_id`.
275
+
276
+ Parameters
277
+ ----------
278
+ call_id : str
279
+ The `uuid` of the call.
280
+
281
+ id : str
282
+ The `uuid` of the media stream to stop.
283
+
284
+ request_options : typing.Optional[RequestOptions]
285
+ Request-specific configuration.
286
+
287
+ Returns
288
+ -------
289
+ AsyncHttpResponse[SuccessResponse]
290
+ Returns a success confirmation. The media stream is stopped.
291
+ """
292
+ _response = await self._client_wrapper.httpx_client.request(
293
+ f"v1/calls/{encode_path_param(call_id)}/streams/{encode_path_param(id)}",
294
+ method="DELETE",
295
+ request_options=request_options,
296
+ )
297
+ try:
298
+ if 200 <= _response.status_code < 300:
299
+ _data = typing.cast(
300
+ SuccessResponse,
301
+ parse_obj_as(
302
+ type_=SuccessResponse, # type: ignore
303
+ object_=_response.json(),
304
+ ),
305
+ )
306
+ return AsyncHttpResponse(response=_response, data=_data)
307
+ if _response.status_code == 401:
308
+ raise UnauthorizedError(
309
+ headers=dict(_response.headers),
310
+ body=typing.cast(
311
+ UnauthorizedErrorResponse,
312
+ parse_obj_as(
313
+ type_=UnauthorizedErrorResponse, # type: ignore
314
+ object_=_response.json(),
315
+ ),
316
+ ),
317
+ )
318
+ _response_json = _response.json()
319
+ except JSONDecodeError:
320
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
321
+ except ValidationError as e:
322
+ raise ParsingError(
323
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
324
+ )
325
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
@@ -0,0 +1,38 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ # isort: skip_file
4
+
5
+ import typing
6
+ from importlib import import_module
7
+
8
+ if typing.TYPE_CHECKING:
9
+ from .call_dtmf_collect_request_prompt import CallDtmfCollectRequestPrompt
10
+ from .call_dtmf_collect_request_prompt_say import CallDtmfCollectRequestPromptSay
11
+ _dynamic_imports: typing.Dict[str, str] = {
12
+ "CallDtmfCollectRequestPrompt": ".call_dtmf_collect_request_prompt",
13
+ "CallDtmfCollectRequestPromptSay": ".call_dtmf_collect_request_prompt_say",
14
+ }
15
+
16
+
17
+ def __getattr__(attr_name: str) -> typing.Any:
18
+ module_name = _dynamic_imports.get(attr_name)
19
+ if module_name is None:
20
+ raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
21
+ try:
22
+ module = import_module(module_name, __package__)
23
+ if module_name == f".{attr_name}":
24
+ return module
25
+ else:
26
+ return getattr(module, attr_name)
27
+ except ImportError as e:
28
+ raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e
29
+ except AttributeError as e:
30
+ raise AttributeError(f"Failed to get {attr_name} from {module_name}: {e}") from e
31
+
32
+
33
+ def __dir__():
34
+ lazy_attrs = list(_dynamic_imports.keys())
35
+ return sorted(lazy_attrs)
36
+
37
+
38
+ __all__ = ["CallDtmfCollectRequestPrompt", "CallDtmfCollectRequestPromptSay"]
@@ -0,0 +1,33 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ import pydantic
6
+ from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
7
+ from .call_dtmf_collect_request_prompt_say import CallDtmfCollectRequestPromptSay
8
+
9
+
10
+ class CallDtmfCollectRequestPrompt(UniversalBaseModel):
11
+ """
12
+ Prompt to play before collecting digits.
13
+ Play a prerecorded audio file or use Wavix Text-To-Speech.
14
+ """
15
+
16
+ play: typing.Optional[str] = pydantic.Field(default=None)
17
+ """
18
+ Audio file URL.
19
+ """
20
+
21
+ say: typing.Optional[CallDtmfCollectRequestPromptSay] = pydantic.Field(default=None)
22
+ """
23
+ Text to speak and voice to use.
24
+ """
25
+
26
+ if IS_PYDANTIC_V2:
27
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
28
+ else:
29
+
30
+ class Config:
31
+ frozen = True
32
+ smart_union = True
33
+ extra = pydantic.Extra.allow
@@ -0,0 +1,31 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ import pydantic
6
+ from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
7
+ from ...types.tts_language import TtsLanguage
8
+ from ...types.tts_voice_id import TtsVoiceId
9
+
10
+
11
+ class CallDtmfCollectRequestPromptSay(UniversalBaseModel):
12
+ """
13
+ Text to speak and voice to use.
14
+ """
15
+
16
+ text: str = pydantic.Field()
17
+ """
18
+ Text to speak.
19
+ """
20
+
21
+ language: typing.Optional[TtsLanguage] = None
22
+ voice: TtsVoiceId
23
+
24
+ if IS_PYDANTIC_V2:
25
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
26
+ else:
27
+
28
+ class Config:
29
+ frozen = True
30
+ smart_union = True
31
+ extra = pydantic.Extra.allow
@@ -0,0 +1,4 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ # isort: skip_file
4
+