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,197 @@
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.voice_campaign_response import VoiceCampaignResponse
8
+ from ..types.voice_campaigns_create_response import VoiceCampaignsCreateResponse
9
+ from ..types.voice_campaigns_get_response import VoiceCampaignsGetResponse
10
+ from .raw_client import AsyncRawVoiceCampaignsClient, RawVoiceCampaignsClient
11
+
12
+ # this is used as the default value for optional parameters
13
+ OMIT = typing.cast(typing.Any, ...)
14
+
15
+
16
+ class VoiceCampaignsClient:
17
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
18
+ self._raw_client = RawVoiceCampaignsClient(client_wrapper=client_wrapper)
19
+
20
+ @property
21
+ def with_raw_response(self) -> RawVoiceCampaignsClient:
22
+ """
23
+ Retrieves a raw implementation of this client that returns raw responses.
24
+
25
+ Returns
26
+ -------
27
+ RawVoiceCampaignsClient
28
+ """
29
+ return self._raw_client
30
+
31
+ def create(
32
+ self, *, voice_campaign: VoiceCampaignResponse, request_options: typing.Optional[RequestOptions] = None
33
+ ) -> VoiceCampaignsCreateResponse:
34
+ """
35
+ Launches a voice campaign that places an outbound call using a pre-configured scenario. Track progress with the returned voice campaign `id`.
36
+
37
+ Parameters
38
+ ----------
39
+ voice_campaign : VoiceCampaignResponse
40
+
41
+ request_options : typing.Optional[RequestOptions]
42
+ Request-specific configuration.
43
+
44
+ Returns
45
+ -------
46
+ VoiceCampaignsCreateResponse
47
+ Returns the launched voice campaign.
48
+
49
+ Examples
50
+ --------
51
+ from wavix import VoiceCampaignResponse, Wavix
52
+
53
+ client = Wavix(
54
+ token="YOUR_TOKEN",
55
+ )
56
+ client.voice_campaigns.create(
57
+ voice_campaign=VoiceCampaignResponse(
58
+ callflow_id=3212,
59
+ caller_id="13123310912",
60
+ contact="16729923812",
61
+ ),
62
+ )
63
+ """
64
+ _response = self._raw_client.create(voice_campaign=voice_campaign, request_options=request_options)
65
+ return _response.data
66
+
67
+ def get(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> VoiceCampaignsGetResponse:
68
+ """
69
+ Returns the voice campaign identified by `id`, including its current status.
70
+
71
+ Parameters
72
+ ----------
73
+ id : int
74
+ The unique ID of the voice campaign to retrieve.
75
+
76
+ request_options : typing.Optional[RequestOptions]
77
+ Request-specific configuration.
78
+
79
+ Returns
80
+ -------
81
+ VoiceCampaignsGetResponse
82
+ Returns the voice campaign.
83
+
84
+ Examples
85
+ --------
86
+ from wavix import Wavix
87
+
88
+ client = Wavix(
89
+ token="YOUR_TOKEN",
90
+ )
91
+ client.voice_campaigns.get(
92
+ id=2321423,
93
+ )
94
+ """
95
+ _response = self._raw_client.get(id, request_options=request_options)
96
+ return _response.data
97
+
98
+
99
+ class AsyncVoiceCampaignsClient:
100
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
101
+ self._raw_client = AsyncRawVoiceCampaignsClient(client_wrapper=client_wrapper)
102
+
103
+ @property
104
+ def with_raw_response(self) -> AsyncRawVoiceCampaignsClient:
105
+ """
106
+ Retrieves a raw implementation of this client that returns raw responses.
107
+
108
+ Returns
109
+ -------
110
+ AsyncRawVoiceCampaignsClient
111
+ """
112
+ return self._raw_client
113
+
114
+ async def create(
115
+ self, *, voice_campaign: VoiceCampaignResponse, request_options: typing.Optional[RequestOptions] = None
116
+ ) -> VoiceCampaignsCreateResponse:
117
+ """
118
+ Launches a voice campaign that places an outbound call using a pre-configured scenario. Track progress with the returned voice campaign `id`.
119
+
120
+ Parameters
121
+ ----------
122
+ voice_campaign : VoiceCampaignResponse
123
+
124
+ request_options : typing.Optional[RequestOptions]
125
+ Request-specific configuration.
126
+
127
+ Returns
128
+ -------
129
+ VoiceCampaignsCreateResponse
130
+ Returns the launched voice campaign.
131
+
132
+ Examples
133
+ --------
134
+ import asyncio
135
+
136
+ from wavix import AsyncWavix, VoiceCampaignResponse
137
+
138
+ client = AsyncWavix(
139
+ token="YOUR_TOKEN",
140
+ )
141
+
142
+
143
+ async def main() -> None:
144
+ await client.voice_campaigns.create(
145
+ voice_campaign=VoiceCampaignResponse(
146
+ callflow_id=3212,
147
+ caller_id="13123310912",
148
+ contact="16729923812",
149
+ ),
150
+ )
151
+
152
+
153
+ asyncio.run(main())
154
+ """
155
+ _response = await self._raw_client.create(voice_campaign=voice_campaign, request_options=request_options)
156
+ return _response.data
157
+
158
+ async def get(
159
+ self, id: int, *, request_options: typing.Optional[RequestOptions] = None
160
+ ) -> VoiceCampaignsGetResponse:
161
+ """
162
+ Returns the voice campaign identified by `id`, including its current status.
163
+
164
+ Parameters
165
+ ----------
166
+ id : int
167
+ The unique ID of the voice campaign to retrieve.
168
+
169
+ request_options : typing.Optional[RequestOptions]
170
+ Request-specific configuration.
171
+
172
+ Returns
173
+ -------
174
+ VoiceCampaignsGetResponse
175
+ Returns the voice campaign.
176
+
177
+ Examples
178
+ --------
179
+ import asyncio
180
+
181
+ from wavix import AsyncWavix
182
+
183
+ client = AsyncWavix(
184
+ token="YOUR_TOKEN",
185
+ )
186
+
187
+
188
+ async def main() -> None:
189
+ await client.voice_campaigns.get(
190
+ id=2321423,
191
+ )
192
+
193
+
194
+ asyncio.run(main())
195
+ """
196
+ _response = await self._raw_client.get(id, request_options=request_options)
197
+ return _response.data
@@ -0,0 +1,332 @@
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 ..core.serialization import convert_and_respect_annotation_metadata
14
+ from ..errors.bad_request_error import BadRequestError
15
+ from ..errors.forbidden_error import ForbiddenError
16
+ from ..errors.not_found_error import NotFoundError
17
+ from ..errors.unprocessable_entity_error import UnprocessableEntityError
18
+ from ..types.voice_campaign_response import VoiceCampaignResponse
19
+ from ..types.voice_campaigns_create_response import VoiceCampaignsCreateResponse
20
+ from ..types.voice_campaigns_get_response import VoiceCampaignsGetResponse
21
+ from pydantic import ValidationError
22
+
23
+ # this is used as the default value for optional parameters
24
+ OMIT = typing.cast(typing.Any, ...)
25
+
26
+
27
+ class RawVoiceCampaignsClient:
28
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
29
+ self._client_wrapper = client_wrapper
30
+
31
+ def create(
32
+ self, *, voice_campaign: VoiceCampaignResponse, request_options: typing.Optional[RequestOptions] = None
33
+ ) -> HttpResponse[VoiceCampaignsCreateResponse]:
34
+ """
35
+ Launches a voice campaign that places an outbound call using a pre-configured scenario. Track progress with the returned voice campaign `id`.
36
+
37
+ Parameters
38
+ ----------
39
+ voice_campaign : VoiceCampaignResponse
40
+
41
+ request_options : typing.Optional[RequestOptions]
42
+ Request-specific configuration.
43
+
44
+ Returns
45
+ -------
46
+ HttpResponse[VoiceCampaignsCreateResponse]
47
+ Returns the launched voice campaign.
48
+ """
49
+ _response = self._client_wrapper.httpx_client.request(
50
+ "v1/voice-campaigns",
51
+ method="POST",
52
+ json={
53
+ "voice_campaign": convert_and_respect_annotation_metadata(
54
+ object_=voice_campaign, annotation=VoiceCampaignResponse, direction="write"
55
+ ),
56
+ },
57
+ headers={
58
+ "content-type": "application/json",
59
+ },
60
+ request_options=request_options,
61
+ omit=OMIT,
62
+ )
63
+ try:
64
+ if 200 <= _response.status_code < 300:
65
+ _data = typing.cast(
66
+ VoiceCampaignsCreateResponse,
67
+ parse_obj_as(
68
+ type_=VoiceCampaignsCreateResponse, # type: ignore
69
+ object_=_response.json(),
70
+ ),
71
+ )
72
+ return HttpResponse(response=_response, data=_data)
73
+ if _response.status_code == 400:
74
+ raise BadRequestError(
75
+ headers=dict(_response.headers),
76
+ body=typing.cast(
77
+ typing.Any,
78
+ parse_obj_as(
79
+ type_=typing.Any, # type: ignore
80
+ object_=_response.json(),
81
+ ),
82
+ ),
83
+ )
84
+ if _response.status_code == 403:
85
+ raise ForbiddenError(
86
+ headers=dict(_response.headers),
87
+ body=typing.cast(
88
+ typing.Any,
89
+ parse_obj_as(
90
+ type_=typing.Any, # type: ignore
91
+ object_=_response.json(),
92
+ ),
93
+ ),
94
+ )
95
+ if _response.status_code == 422:
96
+ raise UnprocessableEntityError(
97
+ headers=dict(_response.headers),
98
+ body=typing.cast(
99
+ typing.Any,
100
+ parse_obj_as(
101
+ type_=typing.Any, # type: ignore
102
+ object_=_response.json(),
103
+ ),
104
+ ),
105
+ )
106
+ _response_json = _response.json()
107
+ except JSONDecodeError:
108
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
109
+ except ValidationError as e:
110
+ raise ParsingError(
111
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
112
+ )
113
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
114
+
115
+ def get(
116
+ self, id: int, *, request_options: typing.Optional[RequestOptions] = None
117
+ ) -> HttpResponse[VoiceCampaignsGetResponse]:
118
+ """
119
+ Returns the voice campaign identified by `id`, including its current status.
120
+
121
+ Parameters
122
+ ----------
123
+ id : int
124
+ The unique ID of the voice campaign to retrieve.
125
+
126
+ request_options : typing.Optional[RequestOptions]
127
+ Request-specific configuration.
128
+
129
+ Returns
130
+ -------
131
+ HttpResponse[VoiceCampaignsGetResponse]
132
+ Returns the voice campaign.
133
+ """
134
+ _response = self._client_wrapper.httpx_client.request(
135
+ f"v1/voice-campaigns/{encode_path_param(id)}",
136
+ method="GET",
137
+ request_options=request_options,
138
+ )
139
+ try:
140
+ if 200 <= _response.status_code < 300:
141
+ _data = typing.cast(
142
+ VoiceCampaignsGetResponse,
143
+ parse_obj_as(
144
+ type_=VoiceCampaignsGetResponse, # type: ignore
145
+ object_=_response.json(),
146
+ ),
147
+ )
148
+ return HttpResponse(response=_response, data=_data)
149
+ if _response.status_code == 403:
150
+ raise ForbiddenError(
151
+ headers=dict(_response.headers),
152
+ body=typing.cast(
153
+ typing.Any,
154
+ parse_obj_as(
155
+ type_=typing.Any, # type: ignore
156
+ object_=_response.json(),
157
+ ),
158
+ ),
159
+ )
160
+ if _response.status_code == 404:
161
+ raise NotFoundError(
162
+ headers=dict(_response.headers),
163
+ body=typing.cast(
164
+ typing.Any,
165
+ parse_obj_as(
166
+ type_=typing.Any, # type: ignore
167
+ object_=_response.json(),
168
+ ),
169
+ ),
170
+ )
171
+ _response_json = _response.json()
172
+ except JSONDecodeError:
173
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
174
+ except ValidationError as e:
175
+ raise ParsingError(
176
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
177
+ )
178
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
179
+
180
+
181
+ class AsyncRawVoiceCampaignsClient:
182
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
183
+ self._client_wrapper = client_wrapper
184
+
185
+ async def create(
186
+ self, *, voice_campaign: VoiceCampaignResponse, request_options: typing.Optional[RequestOptions] = None
187
+ ) -> AsyncHttpResponse[VoiceCampaignsCreateResponse]:
188
+ """
189
+ Launches a voice campaign that places an outbound call using a pre-configured scenario. Track progress with the returned voice campaign `id`.
190
+
191
+ Parameters
192
+ ----------
193
+ voice_campaign : VoiceCampaignResponse
194
+
195
+ request_options : typing.Optional[RequestOptions]
196
+ Request-specific configuration.
197
+
198
+ Returns
199
+ -------
200
+ AsyncHttpResponse[VoiceCampaignsCreateResponse]
201
+ Returns the launched voice campaign.
202
+ """
203
+ _response = await self._client_wrapper.httpx_client.request(
204
+ "v1/voice-campaigns",
205
+ method="POST",
206
+ json={
207
+ "voice_campaign": convert_and_respect_annotation_metadata(
208
+ object_=voice_campaign, annotation=VoiceCampaignResponse, direction="write"
209
+ ),
210
+ },
211
+ headers={
212
+ "content-type": "application/json",
213
+ },
214
+ request_options=request_options,
215
+ omit=OMIT,
216
+ )
217
+ try:
218
+ if 200 <= _response.status_code < 300:
219
+ _data = typing.cast(
220
+ VoiceCampaignsCreateResponse,
221
+ parse_obj_as(
222
+ type_=VoiceCampaignsCreateResponse, # type: ignore
223
+ object_=_response.json(),
224
+ ),
225
+ )
226
+ return AsyncHttpResponse(response=_response, data=_data)
227
+ if _response.status_code == 400:
228
+ raise BadRequestError(
229
+ headers=dict(_response.headers),
230
+ body=typing.cast(
231
+ typing.Any,
232
+ parse_obj_as(
233
+ type_=typing.Any, # type: ignore
234
+ object_=_response.json(),
235
+ ),
236
+ ),
237
+ )
238
+ if _response.status_code == 403:
239
+ raise ForbiddenError(
240
+ headers=dict(_response.headers),
241
+ body=typing.cast(
242
+ typing.Any,
243
+ parse_obj_as(
244
+ type_=typing.Any, # type: ignore
245
+ object_=_response.json(),
246
+ ),
247
+ ),
248
+ )
249
+ if _response.status_code == 422:
250
+ raise UnprocessableEntityError(
251
+ headers=dict(_response.headers),
252
+ body=typing.cast(
253
+ typing.Any,
254
+ parse_obj_as(
255
+ type_=typing.Any, # type: ignore
256
+ object_=_response.json(),
257
+ ),
258
+ ),
259
+ )
260
+ _response_json = _response.json()
261
+ except JSONDecodeError:
262
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
263
+ except ValidationError as e:
264
+ raise ParsingError(
265
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
266
+ )
267
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
268
+
269
+ async def get(
270
+ self, id: int, *, request_options: typing.Optional[RequestOptions] = None
271
+ ) -> AsyncHttpResponse[VoiceCampaignsGetResponse]:
272
+ """
273
+ Returns the voice campaign identified by `id`, including its current status.
274
+
275
+ Parameters
276
+ ----------
277
+ id : int
278
+ The unique ID of the voice campaign to retrieve.
279
+
280
+ request_options : typing.Optional[RequestOptions]
281
+ Request-specific configuration.
282
+
283
+ Returns
284
+ -------
285
+ AsyncHttpResponse[VoiceCampaignsGetResponse]
286
+ Returns the voice campaign.
287
+ """
288
+ _response = await self._client_wrapper.httpx_client.request(
289
+ f"v1/voice-campaigns/{encode_path_param(id)}",
290
+ method="GET",
291
+ request_options=request_options,
292
+ )
293
+ try:
294
+ if 200 <= _response.status_code < 300:
295
+ _data = typing.cast(
296
+ VoiceCampaignsGetResponse,
297
+ parse_obj_as(
298
+ type_=VoiceCampaignsGetResponse, # type: ignore
299
+ object_=_response.json(),
300
+ ),
301
+ )
302
+ return AsyncHttpResponse(response=_response, data=_data)
303
+ if _response.status_code == 403:
304
+ raise ForbiddenError(
305
+ headers=dict(_response.headers),
306
+ body=typing.cast(
307
+ typing.Any,
308
+ parse_obj_as(
309
+ type_=typing.Any, # type: ignore
310
+ object_=_response.json(),
311
+ ),
312
+ ),
313
+ )
314
+ if _response.status_code == 404:
315
+ raise NotFoundError(
316
+ headers=dict(_response.headers),
317
+ body=typing.cast(
318
+ typing.Any,
319
+ parse_obj_as(
320
+ type_=typing.Any, # type: ignore
321
+ object_=_response.json(),
322
+ ),
323
+ ),
324
+ )
325
+ _response_json = _response.json()
326
+ except JSONDecodeError:
327
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
328
+ except ValidationError as e:
329
+ raise ParsingError(
330
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
331
+ )
332
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
@@ -0,0 +1,34 @@
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 . import tokens
10
+ _dynamic_imports: typing.Dict[str, str] = {"tokens": ".tokens"}
11
+
12
+
13
+ def __getattr__(attr_name: str) -> typing.Any:
14
+ module_name = _dynamic_imports.get(attr_name)
15
+ if module_name is None:
16
+ raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
17
+ try:
18
+ module = import_module(module_name, __package__)
19
+ if module_name == f".{attr_name}":
20
+ return module
21
+ else:
22
+ return getattr(module, attr_name)
23
+ except ImportError as e:
24
+ raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e
25
+ except AttributeError as e:
26
+ raise AttributeError(f"Failed to get {attr_name} from {module_name}: {e}") from e
27
+
28
+
29
+ def __dir__():
30
+ lazy_attrs = list(_dynamic_imports.keys())
31
+ return sorted(lazy_attrs)
32
+
33
+
34
+ __all__ = ["tokens"]
wavix/webrtc/client.py ADDED
@@ -0,0 +1,63 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ from __future__ import annotations
4
+
5
+ import typing
6
+
7
+ from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
8
+ from .raw_client import AsyncRawWebrtcClient, RawWebrtcClient
9
+
10
+ if typing.TYPE_CHECKING:
11
+ from .tokens.client import AsyncTokensClient, TokensClient
12
+
13
+
14
+ class WebrtcClient:
15
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
16
+ self._raw_client = RawWebrtcClient(client_wrapper=client_wrapper)
17
+ self._client_wrapper = client_wrapper
18
+ self._tokens: typing.Optional[TokensClient] = None
19
+
20
+ @property
21
+ def with_raw_response(self) -> RawWebrtcClient:
22
+ """
23
+ Retrieves a raw implementation of this client that returns raw responses.
24
+
25
+ Returns
26
+ -------
27
+ RawWebrtcClient
28
+ """
29
+ return self._raw_client
30
+
31
+ @property
32
+ def tokens(self):
33
+ if self._tokens is None:
34
+ from .tokens.client import TokensClient # noqa: E402
35
+
36
+ self._tokens = TokensClient(client_wrapper=self._client_wrapper)
37
+ return self._tokens
38
+
39
+
40
+ class AsyncWebrtcClient:
41
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
42
+ self._raw_client = AsyncRawWebrtcClient(client_wrapper=client_wrapper)
43
+ self._client_wrapper = client_wrapper
44
+ self._tokens: typing.Optional[AsyncTokensClient] = None
45
+
46
+ @property
47
+ def with_raw_response(self) -> AsyncRawWebrtcClient:
48
+ """
49
+ Retrieves a raw implementation of this client that returns raw responses.
50
+
51
+ Returns
52
+ -------
53
+ AsyncRawWebrtcClient
54
+ """
55
+ return self._raw_client
56
+
57
+ @property
58
+ def tokens(self):
59
+ if self._tokens is None:
60
+ from .tokens.client import AsyncTokensClient # noqa: E402
61
+
62
+ self._tokens = AsyncTokensClient(client_wrapper=self._client_wrapper)
63
+ return self._tokens
@@ -0,0 +1,13 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
4
+
5
+
6
+ class RawWebrtcClient:
7
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
8
+ self._client_wrapper = client_wrapper
9
+
10
+
11
+ class AsyncRawWebrtcClient:
12
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
13
+ self._client_wrapper = client_wrapper
@@ -0,0 +1,4 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ # isort: skip_file
4
+