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,629 @@
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.parse_error import ParsingError
10
+ from ..core.pydantic_utilities import parse_obj_as
11
+ from ..core.request_options import RequestOptions
12
+ from ..errors.bad_request_error import BadRequestError
13
+ from ..errors.forbidden_error import ForbiddenError
14
+ from ..errors.not_found_error import NotFoundError
15
+ from .types.checkout_cart_response import CheckoutCartResponse
16
+ from .types.get_cart_response import GetCartResponse
17
+ from .types.remove_cart_response import RemoveCartResponse
18
+ from pydantic import ValidationError
19
+
20
+ # this is used as the default value for optional parameters
21
+ OMIT = typing.cast(typing.Any, ...)
22
+
23
+
24
+ class RawCartClient:
25
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
26
+ self._client_wrapper = client_wrapper
27
+
28
+ def get(self, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[GetCartResponse]:
29
+ """
30
+ Returns the current purchase cart, including the phone numbers it contains and the documents each requires.
31
+
32
+ Parameters
33
+ ----------
34
+ request_options : typing.Optional[RequestOptions]
35
+ Request-specific configuration.
36
+
37
+ Returns
38
+ -------
39
+ HttpResponse[GetCartResponse]
40
+ Returns the cart.
41
+ """
42
+ _response = self._client_wrapper.httpx_client.request(
43
+ "v1/buy/cart",
44
+ method="GET",
45
+ request_options=request_options,
46
+ )
47
+ try:
48
+ if 200 <= _response.status_code < 300:
49
+ _data = typing.cast(
50
+ GetCartResponse,
51
+ parse_obj_as(
52
+ type_=GetCartResponse, # type: ignore
53
+ object_=_response.json(),
54
+ ),
55
+ )
56
+ return HttpResponse(response=_response, data=_data)
57
+ if _response.status_code == 400:
58
+ raise BadRequestError(
59
+ headers=dict(_response.headers),
60
+ body=typing.cast(
61
+ typing.Any,
62
+ parse_obj_as(
63
+ type_=typing.Any, # type: ignore
64
+ object_=_response.json(),
65
+ ),
66
+ ),
67
+ )
68
+ if _response.status_code == 403:
69
+ raise ForbiddenError(
70
+ headers=dict(_response.headers),
71
+ body=typing.cast(
72
+ typing.Any,
73
+ parse_obj_as(
74
+ type_=typing.Any, # type: ignore
75
+ object_=_response.json(),
76
+ ),
77
+ ),
78
+ )
79
+ _response_json = _response.json()
80
+ except JSONDecodeError:
81
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
82
+ except ValidationError as e:
83
+ raise ParsingError(
84
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
85
+ )
86
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
87
+
88
+ def add(
89
+ self, *, ids: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None
90
+ ) -> HttpResponse[typing.List[typing.Any]]:
91
+ """
92
+ Adds the listed phone numbers to the purchase cart.
93
+
94
+ Parameters
95
+ ----------
96
+ ids : typing.Sequence[str]
97
+ Phone numbers to add to the cart.
98
+
99
+ request_options : typing.Optional[RequestOptions]
100
+ Request-specific configuration.
101
+
102
+ Returns
103
+ -------
104
+ HttpResponse[typing.List[typing.Any]]
105
+ Returns the phone numbers now in the cart.
106
+ """
107
+ _response = self._client_wrapper.httpx_client.request(
108
+ "v1/buy/cart",
109
+ method="PUT",
110
+ json={
111
+ "ids": ids,
112
+ },
113
+ headers={
114
+ "content-type": "application/json",
115
+ },
116
+ request_options=request_options,
117
+ omit=OMIT,
118
+ )
119
+ try:
120
+ if 200 <= _response.status_code < 300:
121
+ _data = typing.cast(
122
+ typing.List[typing.Any],
123
+ parse_obj_as(
124
+ type_=typing.List[typing.Any], # type: ignore
125
+ object_=_response.json(),
126
+ ),
127
+ )
128
+ return HttpResponse(response=_response, data=_data)
129
+ if _response.status_code == 400:
130
+ raise BadRequestError(
131
+ headers=dict(_response.headers),
132
+ body=typing.cast(
133
+ typing.Any,
134
+ parse_obj_as(
135
+ type_=typing.Any, # type: ignore
136
+ object_=_response.json(),
137
+ ),
138
+ ),
139
+ )
140
+ if _response.status_code == 403:
141
+ raise ForbiddenError(
142
+ headers=dict(_response.headers),
143
+ body=typing.cast(
144
+ typing.Any,
145
+ parse_obj_as(
146
+ type_=typing.Any, # type: ignore
147
+ object_=_response.json(),
148
+ ),
149
+ ),
150
+ )
151
+ if _response.status_code == 404:
152
+ raise NotFoundError(
153
+ headers=dict(_response.headers),
154
+ body=typing.cast(
155
+ typing.Any,
156
+ parse_obj_as(
157
+ type_=typing.Any, # type: ignore
158
+ object_=_response.json(),
159
+ ),
160
+ ),
161
+ )
162
+ _response_json = _response.json()
163
+ except JSONDecodeError:
164
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
165
+ except ValidationError as e:
166
+ raise ParsingError(
167
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
168
+ )
169
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
170
+
171
+ def remove(
172
+ self, *, ids: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None
173
+ ) -> HttpResponse[RemoveCartResponse]:
174
+ """
175
+ Removes the listed phone numbers from the purchase cart.
176
+
177
+ Parameters
178
+ ----------
179
+ ids : typing.Sequence[str]
180
+ Phone numbers to remove from the cart.
181
+
182
+ request_options : typing.Optional[RequestOptions]
183
+ Request-specific configuration.
184
+
185
+ Returns
186
+ -------
187
+ HttpResponse[RemoveCartResponse]
188
+ Returns a success confirmation. The numbers are removed from the cart.
189
+ """
190
+ _response = self._client_wrapper.httpx_client.request(
191
+ "v1/buy/cart",
192
+ method="DELETE",
193
+ json={
194
+ "ids": ids,
195
+ },
196
+ headers={
197
+ "content-type": "application/json",
198
+ },
199
+ request_options=request_options,
200
+ omit=OMIT,
201
+ )
202
+ try:
203
+ if 200 <= _response.status_code < 300:
204
+ _data = typing.cast(
205
+ RemoveCartResponse,
206
+ parse_obj_as(
207
+ type_=RemoveCartResponse, # type: ignore
208
+ object_=_response.json(),
209
+ ),
210
+ )
211
+ return HttpResponse(response=_response, data=_data)
212
+ if _response.status_code == 400:
213
+ raise BadRequestError(
214
+ headers=dict(_response.headers),
215
+ body=typing.cast(
216
+ typing.Any,
217
+ parse_obj_as(
218
+ type_=typing.Any, # type: ignore
219
+ object_=_response.json(),
220
+ ),
221
+ ),
222
+ )
223
+ if _response.status_code == 403:
224
+ raise ForbiddenError(
225
+ headers=dict(_response.headers),
226
+ body=typing.cast(
227
+ typing.Any,
228
+ parse_obj_as(
229
+ type_=typing.Any, # type: ignore
230
+ object_=_response.json(),
231
+ ),
232
+ ),
233
+ )
234
+ if _response.status_code == 404:
235
+ raise NotFoundError(
236
+ headers=dict(_response.headers),
237
+ body=typing.cast(
238
+ typing.Any,
239
+ parse_obj_as(
240
+ type_=typing.Any, # type: ignore
241
+ object_=_response.json(),
242
+ ),
243
+ ),
244
+ )
245
+ _response_json = _response.json()
246
+ except JSONDecodeError:
247
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
248
+ except ValidationError as e:
249
+ raise ParsingError(
250
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
251
+ )
252
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
253
+
254
+ def checkout(
255
+ self, *, ids: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None
256
+ ) -> HttpResponse[CheckoutCartResponse]:
257
+ """
258
+ Purchases the listed phone numbers from the cart. Activation and monthly fees are deducted from the account balance.
259
+
260
+ Parameters
261
+ ----------
262
+ ids : typing.Sequence[str]
263
+ Phone numbers from the cart to purchase.
264
+
265
+ request_options : typing.Optional[RequestOptions]
266
+ Request-specific configuration.
267
+
268
+ Returns
269
+ -------
270
+ HttpResponse[CheckoutCartResponse]
271
+ Returns a success confirmation. The phone numbers are purchased.
272
+ """
273
+ _response = self._client_wrapper.httpx_client.request(
274
+ "v1/buy/cart/checkout",
275
+ method="POST",
276
+ json={
277
+ "ids": ids,
278
+ },
279
+ headers={
280
+ "content-type": "application/json",
281
+ },
282
+ request_options=request_options,
283
+ omit=OMIT,
284
+ )
285
+ try:
286
+ if 200 <= _response.status_code < 300:
287
+ _data = typing.cast(
288
+ CheckoutCartResponse,
289
+ parse_obj_as(
290
+ type_=CheckoutCartResponse, # type: ignore
291
+ object_=_response.json(),
292
+ ),
293
+ )
294
+ return HttpResponse(response=_response, data=_data)
295
+ if _response.status_code == 403:
296
+ raise ForbiddenError(
297
+ headers=dict(_response.headers),
298
+ body=typing.cast(
299
+ typing.Any,
300
+ parse_obj_as(
301
+ type_=typing.Any, # type: ignore
302
+ object_=_response.json(),
303
+ ),
304
+ ),
305
+ )
306
+ if _response.status_code == 404:
307
+ raise NotFoundError(
308
+ headers=dict(_response.headers),
309
+ body=typing.cast(
310
+ typing.Any,
311
+ parse_obj_as(
312
+ type_=typing.Any, # type: ignore
313
+ object_=_response.json(),
314
+ ),
315
+ ),
316
+ )
317
+ _response_json = _response.json()
318
+ except JSONDecodeError:
319
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
320
+ except ValidationError as e:
321
+ raise ParsingError(
322
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
323
+ )
324
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
325
+
326
+
327
+ class AsyncRawCartClient:
328
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
329
+ self._client_wrapper = client_wrapper
330
+
331
+ async def get(
332
+ self, *, request_options: typing.Optional[RequestOptions] = None
333
+ ) -> AsyncHttpResponse[GetCartResponse]:
334
+ """
335
+ Returns the current purchase cart, including the phone numbers it contains and the documents each requires.
336
+
337
+ Parameters
338
+ ----------
339
+ request_options : typing.Optional[RequestOptions]
340
+ Request-specific configuration.
341
+
342
+ Returns
343
+ -------
344
+ AsyncHttpResponse[GetCartResponse]
345
+ Returns the cart.
346
+ """
347
+ _response = await self._client_wrapper.httpx_client.request(
348
+ "v1/buy/cart",
349
+ method="GET",
350
+ request_options=request_options,
351
+ )
352
+ try:
353
+ if 200 <= _response.status_code < 300:
354
+ _data = typing.cast(
355
+ GetCartResponse,
356
+ parse_obj_as(
357
+ type_=GetCartResponse, # type: ignore
358
+ object_=_response.json(),
359
+ ),
360
+ )
361
+ return AsyncHttpResponse(response=_response, data=_data)
362
+ if _response.status_code == 400:
363
+ raise BadRequestError(
364
+ headers=dict(_response.headers),
365
+ body=typing.cast(
366
+ typing.Any,
367
+ parse_obj_as(
368
+ type_=typing.Any, # type: ignore
369
+ object_=_response.json(),
370
+ ),
371
+ ),
372
+ )
373
+ if _response.status_code == 403:
374
+ raise ForbiddenError(
375
+ headers=dict(_response.headers),
376
+ body=typing.cast(
377
+ typing.Any,
378
+ parse_obj_as(
379
+ type_=typing.Any, # type: ignore
380
+ object_=_response.json(),
381
+ ),
382
+ ),
383
+ )
384
+ _response_json = _response.json()
385
+ except JSONDecodeError:
386
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
387
+ except ValidationError as e:
388
+ raise ParsingError(
389
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
390
+ )
391
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
392
+
393
+ async def add(
394
+ self, *, ids: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None
395
+ ) -> AsyncHttpResponse[typing.List[typing.Any]]:
396
+ """
397
+ Adds the listed phone numbers to the purchase cart.
398
+
399
+ Parameters
400
+ ----------
401
+ ids : typing.Sequence[str]
402
+ Phone numbers to add to the cart.
403
+
404
+ request_options : typing.Optional[RequestOptions]
405
+ Request-specific configuration.
406
+
407
+ Returns
408
+ -------
409
+ AsyncHttpResponse[typing.List[typing.Any]]
410
+ Returns the phone numbers now in the cart.
411
+ """
412
+ _response = await self._client_wrapper.httpx_client.request(
413
+ "v1/buy/cart",
414
+ method="PUT",
415
+ json={
416
+ "ids": ids,
417
+ },
418
+ headers={
419
+ "content-type": "application/json",
420
+ },
421
+ request_options=request_options,
422
+ omit=OMIT,
423
+ )
424
+ try:
425
+ if 200 <= _response.status_code < 300:
426
+ _data = typing.cast(
427
+ typing.List[typing.Any],
428
+ parse_obj_as(
429
+ type_=typing.List[typing.Any], # type: ignore
430
+ object_=_response.json(),
431
+ ),
432
+ )
433
+ return AsyncHttpResponse(response=_response, data=_data)
434
+ if _response.status_code == 400:
435
+ raise BadRequestError(
436
+ headers=dict(_response.headers),
437
+ body=typing.cast(
438
+ typing.Any,
439
+ parse_obj_as(
440
+ type_=typing.Any, # type: ignore
441
+ object_=_response.json(),
442
+ ),
443
+ ),
444
+ )
445
+ if _response.status_code == 403:
446
+ raise ForbiddenError(
447
+ headers=dict(_response.headers),
448
+ body=typing.cast(
449
+ typing.Any,
450
+ parse_obj_as(
451
+ type_=typing.Any, # type: ignore
452
+ object_=_response.json(),
453
+ ),
454
+ ),
455
+ )
456
+ if _response.status_code == 404:
457
+ raise NotFoundError(
458
+ headers=dict(_response.headers),
459
+ body=typing.cast(
460
+ typing.Any,
461
+ parse_obj_as(
462
+ type_=typing.Any, # type: ignore
463
+ object_=_response.json(),
464
+ ),
465
+ ),
466
+ )
467
+ _response_json = _response.json()
468
+ except JSONDecodeError:
469
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
470
+ except ValidationError as e:
471
+ raise ParsingError(
472
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
473
+ )
474
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
475
+
476
+ async def remove(
477
+ self, *, ids: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None
478
+ ) -> AsyncHttpResponse[RemoveCartResponse]:
479
+ """
480
+ Removes the listed phone numbers from the purchase cart.
481
+
482
+ Parameters
483
+ ----------
484
+ ids : typing.Sequence[str]
485
+ Phone numbers to remove from the cart.
486
+
487
+ request_options : typing.Optional[RequestOptions]
488
+ Request-specific configuration.
489
+
490
+ Returns
491
+ -------
492
+ AsyncHttpResponse[RemoveCartResponse]
493
+ Returns a success confirmation. The numbers are removed from the cart.
494
+ """
495
+ _response = await self._client_wrapper.httpx_client.request(
496
+ "v1/buy/cart",
497
+ method="DELETE",
498
+ json={
499
+ "ids": ids,
500
+ },
501
+ headers={
502
+ "content-type": "application/json",
503
+ },
504
+ request_options=request_options,
505
+ omit=OMIT,
506
+ )
507
+ try:
508
+ if 200 <= _response.status_code < 300:
509
+ _data = typing.cast(
510
+ RemoveCartResponse,
511
+ parse_obj_as(
512
+ type_=RemoveCartResponse, # type: ignore
513
+ object_=_response.json(),
514
+ ),
515
+ )
516
+ return AsyncHttpResponse(response=_response, data=_data)
517
+ if _response.status_code == 400:
518
+ raise BadRequestError(
519
+ headers=dict(_response.headers),
520
+ body=typing.cast(
521
+ typing.Any,
522
+ parse_obj_as(
523
+ type_=typing.Any, # type: ignore
524
+ object_=_response.json(),
525
+ ),
526
+ ),
527
+ )
528
+ if _response.status_code == 403:
529
+ raise ForbiddenError(
530
+ headers=dict(_response.headers),
531
+ body=typing.cast(
532
+ typing.Any,
533
+ parse_obj_as(
534
+ type_=typing.Any, # type: ignore
535
+ object_=_response.json(),
536
+ ),
537
+ ),
538
+ )
539
+ if _response.status_code == 404:
540
+ raise NotFoundError(
541
+ headers=dict(_response.headers),
542
+ body=typing.cast(
543
+ typing.Any,
544
+ parse_obj_as(
545
+ type_=typing.Any, # type: ignore
546
+ object_=_response.json(),
547
+ ),
548
+ ),
549
+ )
550
+ _response_json = _response.json()
551
+ except JSONDecodeError:
552
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
553
+ except ValidationError as e:
554
+ raise ParsingError(
555
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
556
+ )
557
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
558
+
559
+ async def checkout(
560
+ self, *, ids: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None
561
+ ) -> AsyncHttpResponse[CheckoutCartResponse]:
562
+ """
563
+ Purchases the listed phone numbers from the cart. Activation and monthly fees are deducted from the account balance.
564
+
565
+ Parameters
566
+ ----------
567
+ ids : typing.Sequence[str]
568
+ Phone numbers from the cart to purchase.
569
+
570
+ request_options : typing.Optional[RequestOptions]
571
+ Request-specific configuration.
572
+
573
+ Returns
574
+ -------
575
+ AsyncHttpResponse[CheckoutCartResponse]
576
+ Returns a success confirmation. The phone numbers are purchased.
577
+ """
578
+ _response = await self._client_wrapper.httpx_client.request(
579
+ "v1/buy/cart/checkout",
580
+ method="POST",
581
+ json={
582
+ "ids": ids,
583
+ },
584
+ headers={
585
+ "content-type": "application/json",
586
+ },
587
+ request_options=request_options,
588
+ omit=OMIT,
589
+ )
590
+ try:
591
+ if 200 <= _response.status_code < 300:
592
+ _data = typing.cast(
593
+ CheckoutCartResponse,
594
+ parse_obj_as(
595
+ type_=CheckoutCartResponse, # type: ignore
596
+ object_=_response.json(),
597
+ ),
598
+ )
599
+ return AsyncHttpResponse(response=_response, data=_data)
600
+ if _response.status_code == 403:
601
+ raise ForbiddenError(
602
+ headers=dict(_response.headers),
603
+ body=typing.cast(
604
+ typing.Any,
605
+ parse_obj_as(
606
+ type_=typing.Any, # type: ignore
607
+ object_=_response.json(),
608
+ ),
609
+ ),
610
+ )
611
+ if _response.status_code == 404:
612
+ raise NotFoundError(
613
+ headers=dict(_response.headers),
614
+ body=typing.cast(
615
+ typing.Any,
616
+ parse_obj_as(
617
+ type_=typing.Any, # type: ignore
618
+ object_=_response.json(),
619
+ ),
620
+ ),
621
+ )
622
+ _response_json = _response.json()
623
+ except JSONDecodeError:
624
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
625
+ except ValidationError as e:
626
+ raise ParsingError(
627
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
628
+ )
629
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
@@ -0,0 +1,40 @@
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 .checkout_cart_response import CheckoutCartResponse
10
+ from .get_cart_response import GetCartResponse
11
+ from .remove_cart_response import RemoveCartResponse
12
+ _dynamic_imports: typing.Dict[str, str] = {
13
+ "CheckoutCartResponse": ".checkout_cart_response",
14
+ "GetCartResponse": ".get_cart_response",
15
+ "RemoveCartResponse": ".remove_cart_response",
16
+ }
17
+
18
+
19
+ def __getattr__(attr_name: str) -> typing.Any:
20
+ module_name = _dynamic_imports.get(attr_name)
21
+ if module_name is None:
22
+ raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
23
+ try:
24
+ module = import_module(module_name, __package__)
25
+ if module_name == f".{attr_name}":
26
+ return module
27
+ else:
28
+ return getattr(module, attr_name)
29
+ except ImportError as e:
30
+ raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e
31
+ except AttributeError as e:
32
+ raise AttributeError(f"Failed to get {attr_name} from {module_name}: {e}") from e
33
+
34
+
35
+ def __dir__():
36
+ lazy_attrs = list(_dynamic_imports.keys())
37
+ return sorted(lazy_attrs)
38
+
39
+
40
+ __all__ = ["CheckoutCartResponse", "GetCartResponse", "RemoveCartResponse"]
@@ -0,0 +1,22 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ import pydantic
6
+ from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
7
+
8
+
9
+ class CheckoutCartResponse(UniversalBaseModel):
10
+ success: bool = pydantic.Field()
11
+ """
12
+ Indicates whether the request was successful.
13
+ """
14
+
15
+ if IS_PYDANTIC_V2:
16
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
17
+ else:
18
+
19
+ class Config:
20
+ frozen = True
21
+ smart_union = True
22
+ extra = pydantic.Extra.allow