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,41 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ # isort: skip_file
4
+
5
+ import typing
6
+ from importlib import import_module
7
+
8
+ if typing.TYPE_CHECKING:
9
+ from . import invoices, transactions
10
+ from .invoices import ListInvoicesResponse
11
+ from .transactions import ListTransactionsResponse
12
+ _dynamic_imports: typing.Dict[str, str] = {
13
+ "ListInvoicesResponse": ".invoices",
14
+ "ListTransactionsResponse": ".transactions",
15
+ "invoices": ".invoices",
16
+ "transactions": ".transactions",
17
+ }
18
+
19
+
20
+ def __getattr__(attr_name: str) -> typing.Any:
21
+ module_name = _dynamic_imports.get(attr_name)
22
+ if module_name is None:
23
+ raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
24
+ try:
25
+ module = import_module(module_name, __package__)
26
+ if module_name == f".{attr_name}":
27
+ return module
28
+ else:
29
+ return getattr(module, attr_name)
30
+ except ImportError as e:
31
+ raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e
32
+ except AttributeError as e:
33
+ raise AttributeError(f"Failed to get {attr_name} from {module_name}: {e}") from e
34
+
35
+
36
+ def __dir__():
37
+ lazy_attrs = list(_dynamic_imports.keys())
38
+ return sorted(lazy_attrs)
39
+
40
+
41
+ __all__ = ["ListInvoicesResponse", "ListTransactionsResponse", "invoices", "transactions"]
@@ -0,0 +1,82 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ from __future__ import annotations
4
+
5
+ import typing
6
+
7
+ from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
8
+ from .raw_client import AsyncRawBillingClient, RawBillingClient
9
+
10
+ if typing.TYPE_CHECKING:
11
+ from .invoices.client import AsyncInvoicesClient, InvoicesClient
12
+ from .transactions.client import AsyncTransactionsClient, TransactionsClient
13
+
14
+
15
+ class BillingClient:
16
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
17
+ self._raw_client = RawBillingClient(client_wrapper=client_wrapper)
18
+ self._client_wrapper = client_wrapper
19
+ self._transactions: typing.Optional[TransactionsClient] = None
20
+ self._invoices: typing.Optional[InvoicesClient] = None
21
+
22
+ @property
23
+ def with_raw_response(self) -> RawBillingClient:
24
+ """
25
+ Retrieves a raw implementation of this client that returns raw responses.
26
+
27
+ Returns
28
+ -------
29
+ RawBillingClient
30
+ """
31
+ return self._raw_client
32
+
33
+ @property
34
+ def transactions(self):
35
+ if self._transactions is None:
36
+ from .transactions.client import TransactionsClient # noqa: E402
37
+
38
+ self._transactions = TransactionsClient(client_wrapper=self._client_wrapper)
39
+ return self._transactions
40
+
41
+ @property
42
+ def invoices(self):
43
+ if self._invoices is None:
44
+ from .invoices.client import InvoicesClient # noqa: E402
45
+
46
+ self._invoices = InvoicesClient(client_wrapper=self._client_wrapper)
47
+ return self._invoices
48
+
49
+
50
+ class AsyncBillingClient:
51
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
52
+ self._raw_client = AsyncRawBillingClient(client_wrapper=client_wrapper)
53
+ self._client_wrapper = client_wrapper
54
+ self._transactions: typing.Optional[AsyncTransactionsClient] = None
55
+ self._invoices: typing.Optional[AsyncInvoicesClient] = None
56
+
57
+ @property
58
+ def with_raw_response(self) -> AsyncRawBillingClient:
59
+ """
60
+ Retrieves a raw implementation of this client that returns raw responses.
61
+
62
+ Returns
63
+ -------
64
+ AsyncRawBillingClient
65
+ """
66
+ return self._raw_client
67
+
68
+ @property
69
+ def transactions(self):
70
+ if self._transactions is None:
71
+ from .transactions.client import AsyncTransactionsClient # noqa: E402
72
+
73
+ self._transactions = AsyncTransactionsClient(client_wrapper=self._client_wrapper)
74
+ return self._transactions
75
+
76
+ @property
77
+ def invoices(self):
78
+ if self._invoices is None:
79
+ from .invoices.client import AsyncInvoicesClient # noqa: E402
80
+
81
+ self._invoices = AsyncInvoicesClient(client_wrapper=self._client_wrapper)
82
+ return self._invoices
@@ -0,0 +1,34 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ # isort: skip_file
4
+
5
+ import typing
6
+ from importlib import import_module
7
+
8
+ if typing.TYPE_CHECKING:
9
+ from .types import ListInvoicesResponse
10
+ _dynamic_imports: typing.Dict[str, str] = {"ListInvoicesResponse": ".types"}
11
+
12
+
13
+ def __getattr__(attr_name: str) -> typing.Any:
14
+ module_name = _dynamic_imports.get(attr_name)
15
+ if module_name is None:
16
+ raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
17
+ try:
18
+ module = import_module(module_name, __package__)
19
+ if module_name == f".{attr_name}":
20
+ return module
21
+ else:
22
+ return getattr(module, attr_name)
23
+ except ImportError as e:
24
+ raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e
25
+ except AttributeError as e:
26
+ raise AttributeError(f"Failed to get {attr_name} from {module_name}: {e}") from e
27
+
28
+
29
+ def __dir__():
30
+ lazy_attrs = list(_dynamic_imports.keys())
31
+ return sorted(lazy_attrs)
32
+
33
+
34
+ __all__ = ["ListInvoicesResponse"]
@@ -0,0 +1,203 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
6
+ from ...core.request_options import RequestOptions
7
+ from .raw_client import AsyncRawInvoicesClient, RawInvoicesClient
8
+ from .types.list_invoices_response import ListInvoicesResponse
9
+
10
+
11
+ class InvoicesClient:
12
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
13
+ self._raw_client = RawInvoicesClient(client_wrapper=client_wrapper)
14
+
15
+ @property
16
+ def with_raw_response(self) -> RawInvoicesClient:
17
+ """
18
+ Retrieves a raw implementation of this client that returns raw responses.
19
+
20
+ Returns
21
+ -------
22
+ RawInvoicesClient
23
+ """
24
+ return self._raw_client
25
+
26
+ def list(
27
+ self,
28
+ *,
29
+ page: typing.Optional[int] = None,
30
+ per_page: typing.Optional[int] = None,
31
+ request_options: typing.Optional[RequestOptions] = None,
32
+ ) -> ListInvoicesResponse:
33
+ """
34
+ Returns the auto-generated financial statements for the authenticated account, paginated and ordered by billing period.
35
+
36
+ Parameters
37
+ ----------
38
+ page : typing.Optional[int]
39
+ Page number to retrieve. Default `1`.
40
+
41
+ per_page : typing.Optional[int]
42
+ Number of records to return per page. Default `25`.
43
+
44
+ request_options : typing.Optional[RequestOptions]
45
+ Request-specific configuration.
46
+
47
+ Returns
48
+ -------
49
+ ListInvoicesResponse
50
+ Returns a paginated list of financial statements.
51
+
52
+ Examples
53
+ --------
54
+ from wavix import Wavix
55
+
56
+ client = Wavix(
57
+ token="YOUR_TOKEN",
58
+ )
59
+ client.billing.invoices.list(
60
+ page=1,
61
+ per_page=25,
62
+ )
63
+ """
64
+ _response = self._raw_client.list(page=page, per_page=per_page, request_options=request_options)
65
+ return _response.data
66
+
67
+ def download(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> typing.Iterator[bytes]:
68
+ """
69
+ Returns the financial statement identified by `id` as a PDF file.
70
+
71
+ Parameters
72
+ ----------
73
+ id : int
74
+ The unique ID of the financial statement to download.
75
+
76
+ request_options : typing.Optional[RequestOptions]
77
+ Request-specific configuration. You can pass in configuration such as `chunk_size`, and more to customize the request and response.
78
+
79
+ Returns
80
+ -------
81
+ typing.Iterator[bytes]
82
+ Returns the financial statement as a PDF file.
83
+
84
+ Examples
85
+ --------
86
+ from wavix import Wavix
87
+
88
+ client = Wavix(
89
+ token="YOUR_TOKEN",
90
+ )
91
+ client.billing.invoices.download(
92
+ id=1,
93
+ )
94
+ """
95
+ with self._raw_client.download(id, request_options=request_options) as r:
96
+ yield from r.data
97
+
98
+
99
+ class AsyncInvoicesClient:
100
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
101
+ self._raw_client = AsyncRawInvoicesClient(client_wrapper=client_wrapper)
102
+
103
+ @property
104
+ def with_raw_response(self) -> AsyncRawInvoicesClient:
105
+ """
106
+ Retrieves a raw implementation of this client that returns raw responses.
107
+
108
+ Returns
109
+ -------
110
+ AsyncRawInvoicesClient
111
+ """
112
+ return self._raw_client
113
+
114
+ async def list(
115
+ self,
116
+ *,
117
+ page: typing.Optional[int] = None,
118
+ per_page: typing.Optional[int] = None,
119
+ request_options: typing.Optional[RequestOptions] = None,
120
+ ) -> ListInvoicesResponse:
121
+ """
122
+ Returns the auto-generated financial statements for the authenticated account, paginated and ordered by billing period.
123
+
124
+ Parameters
125
+ ----------
126
+ page : typing.Optional[int]
127
+ Page number to retrieve. Default `1`.
128
+
129
+ per_page : typing.Optional[int]
130
+ Number of records to return per page. Default `25`.
131
+
132
+ request_options : typing.Optional[RequestOptions]
133
+ Request-specific configuration.
134
+
135
+ Returns
136
+ -------
137
+ ListInvoicesResponse
138
+ Returns a paginated list of financial statements.
139
+
140
+ Examples
141
+ --------
142
+ import asyncio
143
+
144
+ from wavix import AsyncWavix
145
+
146
+ client = AsyncWavix(
147
+ token="YOUR_TOKEN",
148
+ )
149
+
150
+
151
+ async def main() -> None:
152
+ await client.billing.invoices.list(
153
+ page=1,
154
+ per_page=25,
155
+ )
156
+
157
+
158
+ asyncio.run(main())
159
+ """
160
+ _response = await self._raw_client.list(page=page, per_page=per_page, request_options=request_options)
161
+ return _response.data
162
+
163
+ async def download(
164
+ self, id: int, *, request_options: typing.Optional[RequestOptions] = None
165
+ ) -> typing.AsyncIterator[bytes]:
166
+ """
167
+ Returns the financial statement identified by `id` as a PDF file.
168
+
169
+ Parameters
170
+ ----------
171
+ id : int
172
+ The unique ID of the financial statement to download.
173
+
174
+ request_options : typing.Optional[RequestOptions]
175
+ Request-specific configuration. You can pass in configuration such as `chunk_size`, and more to customize the request and response.
176
+
177
+ Returns
178
+ -------
179
+ typing.AsyncIterator[bytes]
180
+ Returns the financial statement as a PDF file.
181
+
182
+ Examples
183
+ --------
184
+ import asyncio
185
+
186
+ from wavix import AsyncWavix
187
+
188
+ client = AsyncWavix(
189
+ token="YOUR_TOKEN",
190
+ )
191
+
192
+
193
+ async def main() -> None:
194
+ await client.billing.invoices.download(
195
+ id=1,
196
+ )
197
+
198
+
199
+ asyncio.run(main())
200
+ """
201
+ async with self._raw_client.download(id, request_options=request_options) as r:
202
+ async for _chunk in r.data:
203
+ yield _chunk
@@ -0,0 +1,302 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import contextlib
4
+ import typing
5
+ from json.decoder import JSONDecodeError
6
+
7
+ from ...core.api_error import ApiError
8
+ from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
9
+ from ...core.http_response import AsyncHttpResponse, HttpResponse
10
+ from ...core.jsonable_encoder import encode_path_param
11
+ from ...core.parse_error import ParsingError
12
+ from ...core.pydantic_utilities import parse_obj_as
13
+ from ...core.request_options import RequestOptions
14
+ from ...errors.forbidden_error import ForbiddenError
15
+ from ...errors.not_found_error import NotFoundError
16
+ from .types.list_invoices_response import ListInvoicesResponse
17
+ from pydantic import ValidationError
18
+
19
+
20
+ class RawInvoicesClient:
21
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
22
+ self._client_wrapper = client_wrapper
23
+
24
+ def list(
25
+ self,
26
+ *,
27
+ page: typing.Optional[int] = None,
28
+ per_page: typing.Optional[int] = None,
29
+ request_options: typing.Optional[RequestOptions] = None,
30
+ ) -> HttpResponse[ListInvoicesResponse]:
31
+ """
32
+ Returns the auto-generated financial statements for the authenticated account, paginated and ordered by billing period.
33
+
34
+ Parameters
35
+ ----------
36
+ page : typing.Optional[int]
37
+ Page number to retrieve. Default `1`.
38
+
39
+ per_page : typing.Optional[int]
40
+ Number of records to return per page. Default `25`.
41
+
42
+ request_options : typing.Optional[RequestOptions]
43
+ Request-specific configuration.
44
+
45
+ Returns
46
+ -------
47
+ HttpResponse[ListInvoicesResponse]
48
+ Returns a paginated list of financial statements.
49
+ """
50
+ _response = self._client_wrapper.httpx_client.request(
51
+ "v1/billing/invoices",
52
+ method="GET",
53
+ params={
54
+ "page": page,
55
+ "per_page": per_page,
56
+ },
57
+ request_options=request_options,
58
+ )
59
+ try:
60
+ if 200 <= _response.status_code < 300:
61
+ _data = typing.cast(
62
+ ListInvoicesResponse,
63
+ parse_obj_as(
64
+ type_=ListInvoicesResponse, # type: ignore
65
+ object_=_response.json(),
66
+ ),
67
+ )
68
+ return HttpResponse(response=_response, data=_data)
69
+ if _response.status_code == 403:
70
+ raise ForbiddenError(
71
+ headers=dict(_response.headers),
72
+ body=typing.cast(
73
+ typing.Any,
74
+ parse_obj_as(
75
+ type_=typing.Any, # type: ignore
76
+ object_=_response.json(),
77
+ ),
78
+ ),
79
+ )
80
+ _response_json = _response.json()
81
+ except JSONDecodeError:
82
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
83
+ except ValidationError as e:
84
+ raise ParsingError(
85
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
86
+ )
87
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
88
+
89
+ @contextlib.contextmanager
90
+ def download(
91
+ self, id: int, *, request_options: typing.Optional[RequestOptions] = None
92
+ ) -> typing.Iterator[HttpResponse[typing.Iterator[bytes]]]:
93
+ """
94
+ Returns the financial statement identified by `id` as a PDF file.
95
+
96
+ Parameters
97
+ ----------
98
+ id : int
99
+ The unique ID of the financial statement to download.
100
+
101
+ request_options : typing.Optional[RequestOptions]
102
+ Request-specific configuration. You can pass in configuration such as `chunk_size`, and more to customize the request and response.
103
+
104
+ Returns
105
+ -------
106
+ typing.Iterator[HttpResponse[typing.Iterator[bytes]]]
107
+ Returns the financial statement as a PDF file.
108
+ """
109
+ with self._client_wrapper.httpx_client.stream(
110
+ f"v1/billing/invoices/{encode_path_param(id)}",
111
+ method="GET",
112
+ request_options=request_options,
113
+ ) as _response:
114
+
115
+ def _stream() -> HttpResponse[typing.Iterator[bytes]]:
116
+ try:
117
+ if 200 <= _response.status_code < 300:
118
+ _chunk_size = request_options.get("chunk_size", None) if request_options is not None else None
119
+ return HttpResponse(
120
+ response=_response, data=(_chunk for _chunk in _response.iter_bytes(chunk_size=_chunk_size))
121
+ )
122
+ _response.read()
123
+ if _response.status_code == 403:
124
+ raise ForbiddenError(
125
+ headers=dict(_response.headers),
126
+ body=typing.cast(
127
+ typing.Any,
128
+ parse_obj_as(
129
+ type_=typing.Any, # type: ignore
130
+ object_=_response.json(),
131
+ ),
132
+ ),
133
+ )
134
+ if _response.status_code == 404:
135
+ raise NotFoundError(
136
+ headers=dict(_response.headers),
137
+ body=typing.cast(
138
+ typing.Any,
139
+ parse_obj_as(
140
+ type_=typing.Any, # type: ignore
141
+ object_=_response.json(),
142
+ ),
143
+ ),
144
+ )
145
+ _response_json = _response.json()
146
+ except JSONDecodeError:
147
+ raise ApiError(
148
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.text
149
+ )
150
+ except ValidationError as e:
151
+ raise ParsingError(
152
+ status_code=_response.status_code,
153
+ headers=dict(_response.headers),
154
+ body=_response.json(),
155
+ cause=e,
156
+ )
157
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
158
+
159
+ yield _stream()
160
+
161
+
162
+ class AsyncRawInvoicesClient:
163
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
164
+ self._client_wrapper = client_wrapper
165
+
166
+ async def list(
167
+ self,
168
+ *,
169
+ page: typing.Optional[int] = None,
170
+ per_page: typing.Optional[int] = None,
171
+ request_options: typing.Optional[RequestOptions] = None,
172
+ ) -> AsyncHttpResponse[ListInvoicesResponse]:
173
+ """
174
+ Returns the auto-generated financial statements for the authenticated account, paginated and ordered by billing period.
175
+
176
+ Parameters
177
+ ----------
178
+ page : typing.Optional[int]
179
+ Page number to retrieve. Default `1`.
180
+
181
+ per_page : typing.Optional[int]
182
+ Number of records to return per page. Default `25`.
183
+
184
+ request_options : typing.Optional[RequestOptions]
185
+ Request-specific configuration.
186
+
187
+ Returns
188
+ -------
189
+ AsyncHttpResponse[ListInvoicesResponse]
190
+ Returns a paginated list of financial statements.
191
+ """
192
+ _response = await self._client_wrapper.httpx_client.request(
193
+ "v1/billing/invoices",
194
+ method="GET",
195
+ params={
196
+ "page": page,
197
+ "per_page": per_page,
198
+ },
199
+ request_options=request_options,
200
+ )
201
+ try:
202
+ if 200 <= _response.status_code < 300:
203
+ _data = typing.cast(
204
+ ListInvoicesResponse,
205
+ parse_obj_as(
206
+ type_=ListInvoicesResponse, # type: ignore
207
+ object_=_response.json(),
208
+ ),
209
+ )
210
+ return AsyncHttpResponse(response=_response, data=_data)
211
+ if _response.status_code == 403:
212
+ raise ForbiddenError(
213
+ headers=dict(_response.headers),
214
+ body=typing.cast(
215
+ typing.Any,
216
+ parse_obj_as(
217
+ type_=typing.Any, # type: ignore
218
+ object_=_response.json(),
219
+ ),
220
+ ),
221
+ )
222
+ _response_json = _response.json()
223
+ except JSONDecodeError:
224
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
225
+ except ValidationError as e:
226
+ raise ParsingError(
227
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
228
+ )
229
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
230
+
231
+ @contextlib.asynccontextmanager
232
+ async def download(
233
+ self, id: int, *, request_options: typing.Optional[RequestOptions] = None
234
+ ) -> typing.AsyncIterator[AsyncHttpResponse[typing.AsyncIterator[bytes]]]:
235
+ """
236
+ Returns the financial statement identified by `id` as a PDF file.
237
+
238
+ Parameters
239
+ ----------
240
+ id : int
241
+ The unique ID of the financial statement to download.
242
+
243
+ request_options : typing.Optional[RequestOptions]
244
+ Request-specific configuration. You can pass in configuration such as `chunk_size`, and more to customize the request and response.
245
+
246
+ Returns
247
+ -------
248
+ typing.AsyncIterator[AsyncHttpResponse[typing.AsyncIterator[bytes]]]
249
+ Returns the financial statement as a PDF file.
250
+ """
251
+ async with self._client_wrapper.httpx_client.stream(
252
+ f"v1/billing/invoices/{encode_path_param(id)}",
253
+ method="GET",
254
+ request_options=request_options,
255
+ ) as _response:
256
+
257
+ async def _stream() -> AsyncHttpResponse[typing.AsyncIterator[bytes]]:
258
+ try:
259
+ if 200 <= _response.status_code < 300:
260
+ _chunk_size = request_options.get("chunk_size", None) if request_options is not None else None
261
+ return AsyncHttpResponse(
262
+ response=_response,
263
+ data=(_chunk async for _chunk in _response.aiter_bytes(chunk_size=_chunk_size)),
264
+ )
265
+ await _response.aread()
266
+ if _response.status_code == 403:
267
+ raise ForbiddenError(
268
+ headers=dict(_response.headers),
269
+ body=typing.cast(
270
+ typing.Any,
271
+ parse_obj_as(
272
+ type_=typing.Any, # type: ignore
273
+ object_=_response.json(),
274
+ ),
275
+ ),
276
+ )
277
+ if _response.status_code == 404:
278
+ raise NotFoundError(
279
+ headers=dict(_response.headers),
280
+ body=typing.cast(
281
+ typing.Any,
282
+ parse_obj_as(
283
+ type_=typing.Any, # type: ignore
284
+ object_=_response.json(),
285
+ ),
286
+ ),
287
+ )
288
+ _response_json = _response.json()
289
+ except JSONDecodeError:
290
+ raise ApiError(
291
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.text
292
+ )
293
+ except ValidationError as e:
294
+ raise ParsingError(
295
+ status_code=_response.status_code,
296
+ headers=dict(_response.headers),
297
+ body=_response.json(),
298
+ cause=e,
299
+ )
300
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
301
+
302
+ yield await _stream()
@@ -0,0 +1,34 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ # isort: skip_file
4
+
5
+ import typing
6
+ from importlib import import_module
7
+
8
+ if typing.TYPE_CHECKING:
9
+ from .list_invoices_response import ListInvoicesResponse
10
+ _dynamic_imports: typing.Dict[str, str] = {"ListInvoicesResponse": ".list_invoices_response"}
11
+
12
+
13
+ def __getattr__(attr_name: str) -> typing.Any:
14
+ module_name = _dynamic_imports.get(attr_name)
15
+ if module_name is None:
16
+ raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
17
+ try:
18
+ module = import_module(module_name, __package__)
19
+ if module_name == f".{attr_name}":
20
+ return module
21
+ else:
22
+ return getattr(module, attr_name)
23
+ except ImportError as e:
24
+ raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e
25
+ except AttributeError as e:
26
+ raise AttributeError(f"Failed to get {attr_name} from {module_name}: {e}") from e
27
+
28
+
29
+ def __dir__():
30
+ lazy_attrs = list(_dynamic_imports.keys())
31
+ return sorted(lazy_attrs)
32
+
33
+
34
+ __all__ = ["ListInvoicesResponse"]