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