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
wavix/client.py ADDED
@@ -0,0 +1,578 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ from __future__ import annotations
4
+
5
+ import typing
6
+
7
+ import httpx
8
+ from .core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
9
+ from .core.logging import LogConfig, Logger
10
+ from .environment import WavixEnvironment
11
+
12
+ if typing.TYPE_CHECKING:
13
+ from .api_keys.client import ApiKeysClient, AsyncApiKeysClient
14
+ from .billing.client import AsyncBillingClient, BillingClient
15
+ from .buy.client import AsyncBuyClient, BuyClient
16
+ from .call_control.client import AsyncCallControlClient, CallControlClient
17
+ from .call_recording.client import AsyncCallRecordingClient, CallRecordingClient
18
+ from .call_webhooks.client import AsyncCallWebhooksClient, CallWebhooksClient
19
+ from .cart.client import AsyncCartClient, CartClient
20
+ from .cdrs.client import AsyncCdrsClient, CdrsClient
21
+ from .link_shortener.client import AsyncLinkShortenerClient, LinkShortenerClient
22
+ from .number_validator.client import AsyncNumberValidatorClient, NumberValidatorClient
23
+ from .numbers.client import AsyncNumbersClient, NumbersClient
24
+ from .profile.client import AsyncProfileClient, ProfileClient
25
+ from .sip_trunks.client import AsyncSipTrunksClient, SipTrunksClient
26
+ from .sms_and_mms.client import AsyncSmsAndMmsClient, SmsAndMmsClient
27
+ from .speech_analytics.client import AsyncSpeechAnalyticsClient, SpeechAnalyticsClient
28
+ from .sub_accounts.client import AsyncSubAccountsClient, SubAccountsClient
29
+ from .ten_dlc.client import AsyncTenDlcClient, TenDlcClient
30
+ from .two_fa.client import AsyncTwoFaClient, TwoFaClient
31
+ from .voice_campaigns.client import AsyncVoiceCampaignsClient, VoiceCampaignsClient
32
+ from .webrtc.client import AsyncWebrtcClient, WebrtcClient
33
+
34
+
35
+ class Wavix:
36
+ """
37
+ Use this class to access the different functions within the SDK. You can instantiate any number of clients with different configuration that will propagate to these functions.
38
+
39
+ Parameters
40
+ ----------
41
+ base_url : typing.Optional[str]
42
+ The base url to use for requests from the client.
43
+
44
+ environment : WavixEnvironment
45
+ The environment to use for requests from the client. from .environment import WavixEnvironment
46
+
47
+
48
+
49
+ Defaults to WavixEnvironment.DEFAULT
50
+
51
+
52
+
53
+ token : typing.Union[str, typing.Callable[[], str]]
54
+ headers : typing.Optional[typing.Dict[str, str]]
55
+ Additional headers to send with every request.
56
+
57
+ timeout : typing.Optional[float]
58
+ The timeout to be used, in seconds, for requests. By default the timeout is 60 seconds, unless a custom httpx client is used, in which case this default is not enforced.
59
+
60
+ max_retries : typing.Optional[int]
61
+ The default maximum number of retries for failed requests. Defaults to 2. Per-request `max_retries` in `request_options` takes precedence over this value.
62
+
63
+ follow_redirects : typing.Optional[bool]
64
+ Whether the default httpx client follows redirects or not, this is irrelevant if a custom httpx client is passed in.
65
+
66
+ httpx_client : typing.Optional[httpx.Client]
67
+ The httpx client to use for making requests, a preconfigured client is used by default, however this is useful should you want to pass in any custom httpx configuration.
68
+
69
+ logging : typing.Optional[typing.Union[LogConfig, Logger]]
70
+ Configure logging for the SDK. Accepts a LogConfig dict with 'level' (debug/info/warn/error), 'logger' (custom logger implementation), and 'silent' (boolean, defaults to True) fields. You can also pass a pre-configured Logger instance.
71
+
72
+ Examples
73
+ --------
74
+ from wavix import Wavix
75
+
76
+ client = Wavix(
77
+ token="YOUR_TOKEN",
78
+ )
79
+ """
80
+
81
+ def __init__(
82
+ self,
83
+ *,
84
+ base_url: typing.Optional[str] = None,
85
+ environment: WavixEnvironment = WavixEnvironment.DEFAULT,
86
+ token: typing.Union[str, typing.Callable[[], str]],
87
+ headers: typing.Optional[typing.Dict[str, str]] = None,
88
+ timeout: typing.Optional[float] = None,
89
+ max_retries: typing.Optional[int] = None,
90
+ follow_redirects: typing.Optional[bool] = True,
91
+ httpx_client: typing.Optional[httpx.Client] = None,
92
+ logging: typing.Optional[typing.Union[LogConfig, Logger]] = None,
93
+ ):
94
+ _defaulted_timeout = (
95
+ timeout if timeout is not None else 60 if httpx_client is None else httpx_client.timeout.read
96
+ )
97
+ _defaulted_max_retries = max_retries if max_retries is not None else 2
98
+ self._client_wrapper = SyncClientWrapper(
99
+ base_url=_get_base_url(base_url=base_url, environment=environment),
100
+ token=token,
101
+ headers=headers,
102
+ httpx_client=httpx_client
103
+ if httpx_client is not None
104
+ else httpx.Client(timeout=_defaulted_timeout, follow_redirects=follow_redirects)
105
+ if follow_redirects is not None
106
+ else httpx.Client(timeout=_defaulted_timeout),
107
+ timeout=_defaulted_timeout,
108
+ max_retries=_defaulted_max_retries,
109
+ logging=logging,
110
+ )
111
+ self._api_keys: typing.Optional[ApiKeysClient] = None
112
+ self._sip_trunks: typing.Optional[SipTrunksClient] = None
113
+ self._cart: typing.Optional[CartClient] = None
114
+ self._numbers: typing.Optional[NumbersClient] = None
115
+ self._cdrs: typing.Optional[CdrsClient] = None
116
+ self._call_recording: typing.Optional[CallRecordingClient] = None
117
+ self._speech_analytics: typing.Optional[SpeechAnalyticsClient] = None
118
+ self._call_webhooks: typing.Optional[CallWebhooksClient] = None
119
+ self._call_control: typing.Optional[CallControlClient] = None
120
+ self._number_validator: typing.Optional[NumberValidatorClient] = None
121
+ self._voice_campaigns: typing.Optional[VoiceCampaignsClient] = None
122
+ self._link_shortener: typing.Optional[LinkShortenerClient] = None
123
+ self._profile: typing.Optional[ProfileClient] = None
124
+ self._sub_accounts: typing.Optional[SubAccountsClient] = None
125
+ self._sms_and_mms: typing.Optional[SmsAndMmsClient] = None
126
+ self._billing: typing.Optional[BillingClient] = None
127
+ self._buy: typing.Optional[BuyClient] = None
128
+ self._ten_dlc: typing.Optional[TenDlcClient] = None
129
+ self._two_fa: typing.Optional[TwoFaClient] = None
130
+ self._webrtc: typing.Optional[WebrtcClient] = None
131
+
132
+ @property
133
+ def api_keys(self):
134
+ if self._api_keys is None:
135
+ from .api_keys.client import ApiKeysClient # noqa: E402
136
+
137
+ self._api_keys = ApiKeysClient(client_wrapper=self._client_wrapper)
138
+ return self._api_keys
139
+
140
+ @property
141
+ def sip_trunks(self):
142
+ if self._sip_trunks is None:
143
+ from .sip_trunks.client import SipTrunksClient # noqa: E402
144
+
145
+ self._sip_trunks = SipTrunksClient(client_wrapper=self._client_wrapper)
146
+ return self._sip_trunks
147
+
148
+ @property
149
+ def cart(self):
150
+ if self._cart is None:
151
+ from .cart.client import CartClient # noqa: E402
152
+
153
+ self._cart = CartClient(client_wrapper=self._client_wrapper)
154
+ return self._cart
155
+
156
+ @property
157
+ def numbers(self):
158
+ if self._numbers is None:
159
+ from .numbers.client import NumbersClient # noqa: E402
160
+
161
+ self._numbers = NumbersClient(client_wrapper=self._client_wrapper)
162
+ return self._numbers
163
+
164
+ @property
165
+ def cdrs(self):
166
+ if self._cdrs is None:
167
+ from .cdrs.client import CdrsClient # noqa: E402
168
+
169
+ self._cdrs = CdrsClient(client_wrapper=self._client_wrapper)
170
+ return self._cdrs
171
+
172
+ @property
173
+ def call_recording(self):
174
+ if self._call_recording is None:
175
+ from .call_recording.client import CallRecordingClient # noqa: E402
176
+
177
+ self._call_recording = CallRecordingClient(client_wrapper=self._client_wrapper)
178
+ return self._call_recording
179
+
180
+ @property
181
+ def speech_analytics(self):
182
+ if self._speech_analytics is None:
183
+ from .speech_analytics.client import SpeechAnalyticsClient # noqa: E402
184
+
185
+ self._speech_analytics = SpeechAnalyticsClient(client_wrapper=self._client_wrapper)
186
+ return self._speech_analytics
187
+
188
+ @property
189
+ def call_webhooks(self):
190
+ if self._call_webhooks is None:
191
+ from .call_webhooks.client import CallWebhooksClient # noqa: E402
192
+
193
+ self._call_webhooks = CallWebhooksClient(client_wrapper=self._client_wrapper)
194
+ return self._call_webhooks
195
+
196
+ @property
197
+ def call_control(self):
198
+ if self._call_control is None:
199
+ from .call_control.client import CallControlClient # noqa: E402
200
+
201
+ self._call_control = CallControlClient(client_wrapper=self._client_wrapper)
202
+ return self._call_control
203
+
204
+ @property
205
+ def number_validator(self):
206
+ if self._number_validator is None:
207
+ from .number_validator.client import NumberValidatorClient # noqa: E402
208
+
209
+ self._number_validator = NumberValidatorClient(client_wrapper=self._client_wrapper)
210
+ return self._number_validator
211
+
212
+ @property
213
+ def voice_campaigns(self):
214
+ if self._voice_campaigns is None:
215
+ from .voice_campaigns.client import VoiceCampaignsClient # noqa: E402
216
+
217
+ self._voice_campaigns = VoiceCampaignsClient(client_wrapper=self._client_wrapper)
218
+ return self._voice_campaigns
219
+
220
+ @property
221
+ def link_shortener(self):
222
+ if self._link_shortener is None:
223
+ from .link_shortener.client import LinkShortenerClient # noqa: E402
224
+
225
+ self._link_shortener = LinkShortenerClient(client_wrapper=self._client_wrapper)
226
+ return self._link_shortener
227
+
228
+ @property
229
+ def profile(self):
230
+ if self._profile is None:
231
+ from .profile.client import ProfileClient # noqa: E402
232
+
233
+ self._profile = ProfileClient(client_wrapper=self._client_wrapper)
234
+ return self._profile
235
+
236
+ @property
237
+ def sub_accounts(self):
238
+ if self._sub_accounts is None:
239
+ from .sub_accounts.client import SubAccountsClient # noqa: E402
240
+
241
+ self._sub_accounts = SubAccountsClient(client_wrapper=self._client_wrapper)
242
+ return self._sub_accounts
243
+
244
+ @property
245
+ def sms_and_mms(self):
246
+ if self._sms_and_mms is None:
247
+ from .sms_and_mms.client import SmsAndMmsClient # noqa: E402
248
+
249
+ self._sms_and_mms = SmsAndMmsClient(client_wrapper=self._client_wrapper)
250
+ return self._sms_and_mms
251
+
252
+ @property
253
+ def billing(self):
254
+ if self._billing is None:
255
+ from .billing.client import BillingClient # noqa: E402
256
+
257
+ self._billing = BillingClient(client_wrapper=self._client_wrapper)
258
+ return self._billing
259
+
260
+ @property
261
+ def buy(self):
262
+ if self._buy is None:
263
+ from .buy.client import BuyClient # noqa: E402
264
+
265
+ self._buy = BuyClient(client_wrapper=self._client_wrapper)
266
+ return self._buy
267
+
268
+ @property
269
+ def ten_dlc(self):
270
+ if self._ten_dlc is None:
271
+ from .ten_dlc.client import TenDlcClient # noqa: E402
272
+
273
+ self._ten_dlc = TenDlcClient(client_wrapper=self._client_wrapper)
274
+ return self._ten_dlc
275
+
276
+ @property
277
+ def two_fa(self):
278
+ if self._two_fa is None:
279
+ from .two_fa.client import TwoFaClient # noqa: E402
280
+
281
+ self._two_fa = TwoFaClient(client_wrapper=self._client_wrapper)
282
+ return self._two_fa
283
+
284
+ @property
285
+ def webrtc(self):
286
+ if self._webrtc is None:
287
+ from .webrtc.client import WebrtcClient # noqa: E402
288
+
289
+ self._webrtc = WebrtcClient(client_wrapper=self._client_wrapper)
290
+ return self._webrtc
291
+
292
+
293
+ def _make_default_async_client(
294
+ timeout: typing.Optional[float],
295
+ follow_redirects: typing.Optional[bool],
296
+ ) -> httpx.AsyncClient:
297
+ try:
298
+ import httpx_aiohttp # type: ignore[import-not-found]
299
+ except ImportError:
300
+ pass
301
+ else:
302
+ if follow_redirects is not None:
303
+ return httpx_aiohttp.HttpxAiohttpClient(timeout=timeout, follow_redirects=follow_redirects)
304
+ return httpx_aiohttp.HttpxAiohttpClient(timeout=timeout)
305
+
306
+ if follow_redirects is not None:
307
+ return httpx.AsyncClient(timeout=timeout, follow_redirects=follow_redirects)
308
+ return httpx.AsyncClient(timeout=timeout)
309
+
310
+
311
+ class AsyncWavix:
312
+ """
313
+ Use this class to access the different functions within the SDK. You can instantiate any number of clients with different configuration that will propagate to these functions.
314
+
315
+ Parameters
316
+ ----------
317
+ base_url : typing.Optional[str]
318
+ The base url to use for requests from the client.
319
+
320
+ environment : WavixEnvironment
321
+ The environment to use for requests from the client. from .environment import WavixEnvironment
322
+
323
+
324
+
325
+ Defaults to WavixEnvironment.DEFAULT
326
+
327
+
328
+
329
+ token : typing.Union[str, typing.Callable[[], str]]
330
+ headers : typing.Optional[typing.Dict[str, str]]
331
+ Additional headers to send with every request.
332
+
333
+ async_token : typing.Optional[typing.Callable[[], typing.Awaitable[str]]]
334
+ An async callable that returns a bearer token. Use this when token acquisition involves async I/O (e.g., refreshing tokens via an async HTTP client). When provided, this is used instead of the synchronous token for async requests.
335
+
336
+ timeout : typing.Optional[float]
337
+ The timeout to be used, in seconds, for requests. By default the timeout is 60 seconds, unless a custom httpx client is used, in which case this default is not enforced.
338
+
339
+ max_retries : typing.Optional[int]
340
+ The default maximum number of retries for failed requests. Defaults to 2. Per-request `max_retries` in `request_options` takes precedence over this value.
341
+
342
+ follow_redirects : typing.Optional[bool]
343
+ Whether the default httpx client follows redirects or not, this is irrelevant if a custom httpx client is passed in.
344
+
345
+ httpx_client : typing.Optional[httpx.AsyncClient]
346
+ The httpx client to use for making requests, a preconfigured client is used by default, however this is useful should you want to pass in any custom httpx configuration.
347
+
348
+ logging : typing.Optional[typing.Union[LogConfig, Logger]]
349
+ Configure logging for the SDK. Accepts a LogConfig dict with 'level' (debug/info/warn/error), 'logger' (custom logger implementation), and 'silent' (boolean, defaults to True) fields. You can also pass a pre-configured Logger instance.
350
+
351
+ Examples
352
+ --------
353
+ from wavix import AsyncWavix
354
+
355
+ client = AsyncWavix(
356
+ token="YOUR_TOKEN",
357
+ )
358
+ """
359
+
360
+ def __init__(
361
+ self,
362
+ *,
363
+ base_url: typing.Optional[str] = None,
364
+ environment: WavixEnvironment = WavixEnvironment.DEFAULT,
365
+ token: typing.Union[str, typing.Callable[[], str]],
366
+ headers: typing.Optional[typing.Dict[str, str]] = None,
367
+ async_token: typing.Optional[typing.Callable[[], typing.Awaitable[str]]] = None,
368
+ timeout: typing.Optional[float] = None,
369
+ max_retries: typing.Optional[int] = None,
370
+ follow_redirects: typing.Optional[bool] = True,
371
+ httpx_client: typing.Optional[httpx.AsyncClient] = None,
372
+ logging: typing.Optional[typing.Union[LogConfig, Logger]] = None,
373
+ ):
374
+ _defaulted_timeout = (
375
+ timeout if timeout is not None else 60 if httpx_client is None else httpx_client.timeout.read
376
+ )
377
+ _defaulted_max_retries = max_retries if max_retries is not None else 2
378
+ self._client_wrapper = AsyncClientWrapper(
379
+ base_url=_get_base_url(base_url=base_url, environment=environment),
380
+ token=token,
381
+ headers=headers,
382
+ async_token=async_token,
383
+ httpx_client=httpx_client
384
+ if httpx_client is not None
385
+ else _make_default_async_client(timeout=_defaulted_timeout, follow_redirects=follow_redirects),
386
+ timeout=_defaulted_timeout,
387
+ max_retries=_defaulted_max_retries,
388
+ logging=logging,
389
+ )
390
+ self._api_keys: typing.Optional[AsyncApiKeysClient] = None
391
+ self._sip_trunks: typing.Optional[AsyncSipTrunksClient] = None
392
+ self._cart: typing.Optional[AsyncCartClient] = None
393
+ self._numbers: typing.Optional[AsyncNumbersClient] = None
394
+ self._cdrs: typing.Optional[AsyncCdrsClient] = None
395
+ self._call_recording: typing.Optional[AsyncCallRecordingClient] = None
396
+ self._speech_analytics: typing.Optional[AsyncSpeechAnalyticsClient] = None
397
+ self._call_webhooks: typing.Optional[AsyncCallWebhooksClient] = None
398
+ self._call_control: typing.Optional[AsyncCallControlClient] = None
399
+ self._number_validator: typing.Optional[AsyncNumberValidatorClient] = None
400
+ self._voice_campaigns: typing.Optional[AsyncVoiceCampaignsClient] = None
401
+ self._link_shortener: typing.Optional[AsyncLinkShortenerClient] = None
402
+ self._profile: typing.Optional[AsyncProfileClient] = None
403
+ self._sub_accounts: typing.Optional[AsyncSubAccountsClient] = None
404
+ self._sms_and_mms: typing.Optional[AsyncSmsAndMmsClient] = None
405
+ self._billing: typing.Optional[AsyncBillingClient] = None
406
+ self._buy: typing.Optional[AsyncBuyClient] = None
407
+ self._ten_dlc: typing.Optional[AsyncTenDlcClient] = None
408
+ self._two_fa: typing.Optional[AsyncTwoFaClient] = None
409
+ self._webrtc: typing.Optional[AsyncWebrtcClient] = None
410
+
411
+ @property
412
+ def api_keys(self):
413
+ if self._api_keys is None:
414
+ from .api_keys.client import AsyncApiKeysClient # noqa: E402
415
+
416
+ self._api_keys = AsyncApiKeysClient(client_wrapper=self._client_wrapper)
417
+ return self._api_keys
418
+
419
+ @property
420
+ def sip_trunks(self):
421
+ if self._sip_trunks is None:
422
+ from .sip_trunks.client import AsyncSipTrunksClient # noqa: E402
423
+
424
+ self._sip_trunks = AsyncSipTrunksClient(client_wrapper=self._client_wrapper)
425
+ return self._sip_trunks
426
+
427
+ @property
428
+ def cart(self):
429
+ if self._cart is None:
430
+ from .cart.client import AsyncCartClient # noqa: E402
431
+
432
+ self._cart = AsyncCartClient(client_wrapper=self._client_wrapper)
433
+ return self._cart
434
+
435
+ @property
436
+ def numbers(self):
437
+ if self._numbers is None:
438
+ from .numbers.client import AsyncNumbersClient # noqa: E402
439
+
440
+ self._numbers = AsyncNumbersClient(client_wrapper=self._client_wrapper)
441
+ return self._numbers
442
+
443
+ @property
444
+ def cdrs(self):
445
+ if self._cdrs is None:
446
+ from .cdrs.client import AsyncCdrsClient # noqa: E402
447
+
448
+ self._cdrs = AsyncCdrsClient(client_wrapper=self._client_wrapper)
449
+ return self._cdrs
450
+
451
+ @property
452
+ def call_recording(self):
453
+ if self._call_recording is None:
454
+ from .call_recording.client import AsyncCallRecordingClient # noqa: E402
455
+
456
+ self._call_recording = AsyncCallRecordingClient(client_wrapper=self._client_wrapper)
457
+ return self._call_recording
458
+
459
+ @property
460
+ def speech_analytics(self):
461
+ if self._speech_analytics is None:
462
+ from .speech_analytics.client import AsyncSpeechAnalyticsClient # noqa: E402
463
+
464
+ self._speech_analytics = AsyncSpeechAnalyticsClient(client_wrapper=self._client_wrapper)
465
+ return self._speech_analytics
466
+
467
+ @property
468
+ def call_webhooks(self):
469
+ if self._call_webhooks is None:
470
+ from .call_webhooks.client import AsyncCallWebhooksClient # noqa: E402
471
+
472
+ self._call_webhooks = AsyncCallWebhooksClient(client_wrapper=self._client_wrapper)
473
+ return self._call_webhooks
474
+
475
+ @property
476
+ def call_control(self):
477
+ if self._call_control is None:
478
+ from .call_control.client import AsyncCallControlClient # noqa: E402
479
+
480
+ self._call_control = AsyncCallControlClient(client_wrapper=self._client_wrapper)
481
+ return self._call_control
482
+
483
+ @property
484
+ def number_validator(self):
485
+ if self._number_validator is None:
486
+ from .number_validator.client import AsyncNumberValidatorClient # noqa: E402
487
+
488
+ self._number_validator = AsyncNumberValidatorClient(client_wrapper=self._client_wrapper)
489
+ return self._number_validator
490
+
491
+ @property
492
+ def voice_campaigns(self):
493
+ if self._voice_campaigns is None:
494
+ from .voice_campaigns.client import AsyncVoiceCampaignsClient # noqa: E402
495
+
496
+ self._voice_campaigns = AsyncVoiceCampaignsClient(client_wrapper=self._client_wrapper)
497
+ return self._voice_campaigns
498
+
499
+ @property
500
+ def link_shortener(self):
501
+ if self._link_shortener is None:
502
+ from .link_shortener.client import AsyncLinkShortenerClient # noqa: E402
503
+
504
+ self._link_shortener = AsyncLinkShortenerClient(client_wrapper=self._client_wrapper)
505
+ return self._link_shortener
506
+
507
+ @property
508
+ def profile(self):
509
+ if self._profile is None:
510
+ from .profile.client import AsyncProfileClient # noqa: E402
511
+
512
+ self._profile = AsyncProfileClient(client_wrapper=self._client_wrapper)
513
+ return self._profile
514
+
515
+ @property
516
+ def sub_accounts(self):
517
+ if self._sub_accounts is None:
518
+ from .sub_accounts.client import AsyncSubAccountsClient # noqa: E402
519
+
520
+ self._sub_accounts = AsyncSubAccountsClient(client_wrapper=self._client_wrapper)
521
+ return self._sub_accounts
522
+
523
+ @property
524
+ def sms_and_mms(self):
525
+ if self._sms_and_mms is None:
526
+ from .sms_and_mms.client import AsyncSmsAndMmsClient # noqa: E402
527
+
528
+ self._sms_and_mms = AsyncSmsAndMmsClient(client_wrapper=self._client_wrapper)
529
+ return self._sms_and_mms
530
+
531
+ @property
532
+ def billing(self):
533
+ if self._billing is None:
534
+ from .billing.client import AsyncBillingClient # noqa: E402
535
+
536
+ self._billing = AsyncBillingClient(client_wrapper=self._client_wrapper)
537
+ return self._billing
538
+
539
+ @property
540
+ def buy(self):
541
+ if self._buy is None:
542
+ from .buy.client import AsyncBuyClient # noqa: E402
543
+
544
+ self._buy = AsyncBuyClient(client_wrapper=self._client_wrapper)
545
+ return self._buy
546
+
547
+ @property
548
+ def ten_dlc(self):
549
+ if self._ten_dlc is None:
550
+ from .ten_dlc.client import AsyncTenDlcClient # noqa: E402
551
+
552
+ self._ten_dlc = AsyncTenDlcClient(client_wrapper=self._client_wrapper)
553
+ return self._ten_dlc
554
+
555
+ @property
556
+ def two_fa(self):
557
+ if self._two_fa is None:
558
+ from .two_fa.client import AsyncTwoFaClient # noqa: E402
559
+
560
+ self._two_fa = AsyncTwoFaClient(client_wrapper=self._client_wrapper)
561
+ return self._two_fa
562
+
563
+ @property
564
+ def webrtc(self):
565
+ if self._webrtc is None:
566
+ from .webrtc.client import AsyncWebrtcClient # noqa: E402
567
+
568
+ self._webrtc = AsyncWebrtcClient(client_wrapper=self._client_wrapper)
569
+ return self._webrtc
570
+
571
+
572
+ def _get_base_url(*, base_url: typing.Optional[str] = None, environment: WavixEnvironment) -> str:
573
+ if base_url is not None:
574
+ return base_url
575
+ elif environment is not None:
576
+ return environment.value
577
+ else:
578
+ raise Exception("Please pass in either base_url or environment to construct the client")
wavix/core/__init__.py ADDED
@@ -0,0 +1,127 @@
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 .api_error import ApiError
10
+ from .client_wrapper import AsyncClientWrapper, BaseClientWrapper, SyncClientWrapper
11
+ from .datetime_utils import Rfc2822DateTime, parse_rfc2822_datetime, serialize_datetime
12
+ from .file import File, convert_file_dict_to_httpx_tuples, with_content_type
13
+ from .http_client import AsyncHttpClient, HttpClient
14
+ from .http_response import AsyncHttpResponse, HttpResponse
15
+ from .jsonable_encoder import encode_path_param, jsonable_encoder
16
+ from .logging import ConsoleLogger, ILogger, LogConfig, LogLevel, Logger, create_logger
17
+ from .parse_error import ParsingError
18
+ from .pydantic_utilities import (
19
+ IS_PYDANTIC_V2,
20
+ UniversalBaseModel,
21
+ UniversalRootModel,
22
+ parse_obj_as,
23
+ universal_field_validator,
24
+ universal_root_validator,
25
+ update_forward_refs,
26
+ )
27
+ from .query_encoder import encode_query
28
+ from .remove_none_from_dict import remove_none_from_dict
29
+ from .request_options import RequestOptions
30
+ from .serialization import FieldMetadata, convert_and_respect_annotation_metadata
31
+ _dynamic_imports: typing.Dict[str, str] = {
32
+ "ApiError": ".api_error",
33
+ "AsyncClientWrapper": ".client_wrapper",
34
+ "AsyncHttpClient": ".http_client",
35
+ "AsyncHttpResponse": ".http_response",
36
+ "BaseClientWrapper": ".client_wrapper",
37
+ "ConsoleLogger": ".logging",
38
+ "FieldMetadata": ".serialization",
39
+ "File": ".file",
40
+ "HttpClient": ".http_client",
41
+ "HttpResponse": ".http_response",
42
+ "ILogger": ".logging",
43
+ "IS_PYDANTIC_V2": ".pydantic_utilities",
44
+ "LogConfig": ".logging",
45
+ "LogLevel": ".logging",
46
+ "Logger": ".logging",
47
+ "ParsingError": ".parse_error",
48
+ "RequestOptions": ".request_options",
49
+ "Rfc2822DateTime": ".datetime_utils",
50
+ "SyncClientWrapper": ".client_wrapper",
51
+ "UniversalBaseModel": ".pydantic_utilities",
52
+ "UniversalRootModel": ".pydantic_utilities",
53
+ "convert_and_respect_annotation_metadata": ".serialization",
54
+ "convert_file_dict_to_httpx_tuples": ".file",
55
+ "create_logger": ".logging",
56
+ "encode_path_param": ".jsonable_encoder",
57
+ "encode_query": ".query_encoder",
58
+ "jsonable_encoder": ".jsonable_encoder",
59
+ "parse_obj_as": ".pydantic_utilities",
60
+ "parse_rfc2822_datetime": ".datetime_utils",
61
+ "remove_none_from_dict": ".remove_none_from_dict",
62
+ "serialize_datetime": ".datetime_utils",
63
+ "universal_field_validator": ".pydantic_utilities",
64
+ "universal_root_validator": ".pydantic_utilities",
65
+ "update_forward_refs": ".pydantic_utilities",
66
+ "with_content_type": ".file",
67
+ }
68
+
69
+
70
+ def __getattr__(attr_name: str) -> typing.Any:
71
+ module_name = _dynamic_imports.get(attr_name)
72
+ if module_name is None:
73
+ raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
74
+ try:
75
+ module = import_module(module_name, __package__)
76
+ if module_name == f".{attr_name}":
77
+ return module
78
+ else:
79
+ return getattr(module, attr_name)
80
+ except ImportError as e:
81
+ raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e
82
+ except AttributeError as e:
83
+ raise AttributeError(f"Failed to get {attr_name} from {module_name}: {e}") from e
84
+
85
+
86
+ def __dir__():
87
+ lazy_attrs = list(_dynamic_imports.keys())
88
+ return sorted(lazy_attrs)
89
+
90
+
91
+ __all__ = [
92
+ "ApiError",
93
+ "AsyncClientWrapper",
94
+ "AsyncHttpClient",
95
+ "AsyncHttpResponse",
96
+ "BaseClientWrapper",
97
+ "ConsoleLogger",
98
+ "FieldMetadata",
99
+ "File",
100
+ "HttpClient",
101
+ "HttpResponse",
102
+ "ILogger",
103
+ "IS_PYDANTIC_V2",
104
+ "LogConfig",
105
+ "LogLevel",
106
+ "Logger",
107
+ "ParsingError",
108
+ "RequestOptions",
109
+ "Rfc2822DateTime",
110
+ "SyncClientWrapper",
111
+ "UniversalBaseModel",
112
+ "UniversalRootModel",
113
+ "convert_and_respect_annotation_metadata",
114
+ "convert_file_dict_to_httpx_tuples",
115
+ "create_logger",
116
+ "encode_path_param",
117
+ "encode_query",
118
+ "jsonable_encoder",
119
+ "parse_obj_as",
120
+ "parse_rfc2822_datetime",
121
+ "remove_none_from_dict",
122
+ "serialize_datetime",
123
+ "universal_field_validator",
124
+ "universal_root_validator",
125
+ "update_forward_refs",
126
+ "with_content_type",
127
+ ]