byteplus-python-sdk-v2 3.0.43__py2.py3-none-any.whl → 3.0.45__py2.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 (562) hide show
  1. {byteplus_python_sdk_v2-3.0.43.dist-info → byteplus_python_sdk_v2-3.0.45.dist-info}/METADATA +27 -1
  2. {byteplus_python_sdk_v2-3.0.43.dist-info → byteplus_python_sdk_v2-3.0.45.dist-info}/RECORD +562 -94
  3. {byteplus_python_sdk_v2-3.0.43.dist-info → byteplus_python_sdk_v2-3.0.45.dist-info}/top_level.txt +2 -0
  4. byteplussdkcore/api_client.py +219 -1
  5. byteplussdkcore/auth/credential.py +4 -0
  6. byteplussdkcore/auth/providers/__init__.py +5 -1
  7. byteplussdkcore/auth/providers/cli_config_provider.py +628 -0
  8. byteplussdkcore/auth/providers/default_provider.py +103 -0
  9. byteplussdkcore/auth/providers/ecs_role_provider.py +186 -0
  10. byteplussdkcore/auth/providers/env_provider.py +38 -0
  11. byteplussdkcore/auth/providers/provider.py +36 -1
  12. byteplussdkcore/auth/providers/static_provider.py +3 -3
  13. byteplussdkcore/auth/providers/sts_oidc_provider.py +132 -42
  14. byteplussdkcore/auth/providers/sts_provider.py +10 -1
  15. byteplussdkcore/auth/providers/sts_saml_provider.py +77 -32
  16. byteplussdkcore/configuration.py +1 -1
  17. byteplussdkcore/endpoint/providers/default_provider.py +28 -0
  18. byteplussdkcore/endpoint/providers/standard_provider.py +2 -3
  19. byteplussdkcore/feature/__init__.py +6 -0
  20. byteplussdkcore/feature/rds/__init__.py +4 -0
  21. byteplussdkcore/feature/rds/connect_utils.py +88 -0
  22. byteplussdkcore/interceptor/interceptors/request.py +4 -0
  23. byteplussdkcore/interceptor/interceptors/resolve_endpoint_interceptor.py +8 -1
  24. byteplussdkcore/interceptor/interceptors/sign_request_interceptor.py +42 -14
  25. byteplussdkcore/signv4.py +86 -0
  26. byteplussdkexamples/byteplussdkarkruntime/async_completions.py +0 -2
  27. byteplussdkexamples/byteplussdkarkruntime/completions.py +1 -3
  28. byteplussdkexamples/byteplussdkarkruntime/context.py +1 -3
  29. byteplussdkkickart/__init__.py +251 -0
  30. byteplussdkkickart/api/__init__.py +6 -0
  31. byteplussdkkickart/api/kickart_api.py +11189 -0
  32. byteplussdkkickart/models/__init__.py +247 -0
  33. byteplussdkkickart/models/batch_delete_asset_request.py +123 -0
  34. byteplussdkkickart/models/batch_delete_asset_response.py +95 -0
  35. byteplussdkkickart/models/batch_delete_media_request.py +123 -0
  36. byteplussdkkickart/models/batch_delete_media_response.py +123 -0
  37. byteplussdkkickart/models/check_delete_media_request.py +123 -0
  38. byteplussdkkickart/models/check_delete_media_response.py +123 -0
  39. byteplussdkkickart/models/check_product_url_request.py +149 -0
  40. byteplussdkkickart/models/check_product_url_response.py +123 -0
  41. byteplussdkkickart/models/clear_ad_variations_output_videos_request.py +124 -0
  42. byteplussdkkickart/models/clear_ad_variations_output_videos_response.py +95 -0
  43. byteplussdkkickart/models/clear_ad_variations_project_request.py +150 -0
  44. byteplussdkkickart/models/clear_ad_variations_project_response.py +95 -0
  45. byteplussdkkickart/models/copy_genius_project_request.py +149 -0
  46. byteplussdkkickart/models/copy_genius_project_response.py +149 -0
  47. byteplussdkkickart/models/create_ad_variations_project_request.py +123 -0
  48. byteplussdkkickart/models/create_ad_variations_project_response.py +123 -0
  49. byteplussdkkickart/models/create_ai_template_task_request.py +227 -0
  50. byteplussdkkickart/models/create_ai_template_task_response.py +123 -0
  51. byteplussdkkickart/models/create_api_key_request.py +123 -0
  52. byteplussdkkickart/models/create_api_key_response.py +123 -0
  53. byteplussdkkickart/models/create_auth_url_request.py +149 -0
  54. byteplussdkkickart/models/create_auth_url_response.py +175 -0
  55. byteplussdkkickart/models/create_avatar_request.py +149 -0
  56. byteplussdkkickart/models/create_avatar_response.py +123 -0
  57. byteplussdkkickart/models/create_draft_request.py +149 -0
  58. byteplussdkkickart/models/create_draft_response.py +149 -0
  59. byteplussdkkickart/models/create_film_request.py +721 -0
  60. byteplussdkkickart/models/create_film_response.py +95 -0
  61. byteplussdkkickart/models/create_folder_request.py +279 -0
  62. byteplussdkkickart/models/create_folder_response.py +123 -0
  63. byteplussdkkickart/models/create_item_request.py +227 -0
  64. byteplussdkkickart/models/create_item_response.py +149 -0
  65. byteplussdkkickart/models/create_material_request.py +851 -0
  66. byteplussdkkickart/models/create_material_response.py +95 -0
  67. byteplussdkkickart/models/create_media_request.py +357 -0
  68. byteplussdkkickart/models/create_media_response.py +149 -0
  69. byteplussdkkickart/models/create_project_from_template_request.py +123 -0
  70. byteplussdkkickart/models/create_project_from_template_response.py +123 -0
  71. byteplussdkkickart/models/create_project_request.py +487 -0
  72. byteplussdkkickart/models/create_project_response.py +201 -0
  73. byteplussdkkickart/models/create_template_project_request.py +149 -0
  74. byteplussdkkickart/models/create_template_project_response.py +175 -0
  75. byteplussdkkickart/models/delete_all_task_item_request.py +124 -0
  76. byteplussdkkickart/models/delete_all_task_item_response.py +95 -0
  77. byteplussdkkickart/models/delete_api_key_request.py +123 -0
  78. byteplussdkkickart/models/delete_api_key_response.py +95 -0
  79. byteplussdkkickart/models/delete_task_item_request.py +123 -0
  80. byteplussdkkickart/models/delete_task_item_response.py +95 -0
  81. byteplussdkkickart/models/download_asset_request.py +149 -0
  82. byteplussdkkickart/models/download_asset_response.py +149 -0
  83. byteplussdkkickart/models/export_editor_video_request.py +279 -0
  84. byteplussdkkickart/models/export_editor_video_response.py +123 -0
  85. byteplussdkkickart/models/export_video_request.py +149 -0
  86. byteplussdkkickart/models/export_video_response.py +123 -0
  87. byteplussdkkickart/models/gen_ad_variations_analysis_request.py +124 -0
  88. byteplussdkkickart/models/gen_ad_variations_analysis_response.py +123 -0
  89. byteplussdkkickart/models/gen_ad_variations_video_request.py +124 -0
  90. byteplussdkkickart/models/gen_ad_variations_video_response.py +123 -0
  91. byteplussdkkickart/models/gen_bgm_by_product_request.py +175 -0
  92. byteplussdkkickart/models/gen_bgm_by_product_response.py +123 -0
  93. byteplussdkkickart/models/gen_bgm_by_video_request.py +175 -0
  94. byteplussdkkickart/models/gen_bgm_by_video_response.py +123 -0
  95. byteplussdkkickart/models/gen_main_video_request.py +175 -0
  96. byteplussdkkickart/models/gen_main_video_response.py +149 -0
  97. byteplussdkkickart/models/gen_pic_by_prompt_request.py +175 -0
  98. byteplussdkkickart/models/gen_pic_by_prompt_response.py +123 -0
  99. byteplussdkkickart/models/gen_pics_video_by_story_request.py +175 -0
  100. byteplussdkkickart/models/gen_pics_video_by_story_response.py +123 -0
  101. byteplussdkkickart/models/gen_product_intro_creative_request.py +149 -0
  102. byteplussdkkickart/models/gen_product_intro_creative_response.py +123 -0
  103. byteplussdkkickart/models/gen_product_intro_script_request.py +149 -0
  104. byteplussdkkickart/models/gen_product_intro_script_response.py +123 -0
  105. byteplussdkkickart/models/gen_product_intro_video_request.py +149 -0
  106. byteplussdkkickart/models/gen_product_intro_video_response.py +149 -0
  107. byteplussdkkickart/models/gen_product_storyboard_outline_request.py +149 -0
  108. byteplussdkkickart/models/gen_product_storyboard_outline_response.py +149 -0
  109. byteplussdkkickart/models/gen_product_storyboard_video_request.py +175 -0
  110. byteplussdkkickart/models/gen_product_storyboard_video_response.py +175 -0
  111. byteplussdkkickart/models/gen_story_by_prompt_request.py +123 -0
  112. byteplussdkkickart/models/gen_story_by_prompt_response.py +123 -0
  113. byteplussdkkickart/models/gen_template_script_request.py +175 -0
  114. byteplussdkkickart/models/gen_template_script_response.py +175 -0
  115. byteplussdkkickart/models/gen_template_video_request.py +201 -0
  116. byteplussdkkickart/models/gen_template_video_response.py +149 -0
  117. byteplussdkkickart/models/gen_video_by_prompt_request.py +175 -0
  118. byteplussdkkickart/models/gen_video_by_prompt_response.py +123 -0
  119. byteplussdkkickart/models/get_ai_template_task_status_request.py +123 -0
  120. byteplussdkkickart/models/get_ai_template_task_status_response.py +123 -0
  121. byteplussdkkickart/models/get_ai_template_template_info_request.py +123 -0
  122. byteplussdkkickart/models/get_ai_template_template_info_response.py +123 -0
  123. byteplussdkkickart/models/get_avatar_request.py +123 -0
  124. byteplussdkkickart/models/get_avatar_response.py +123 -0
  125. byteplussdkkickart/models/get_block_detail_request.py +149 -0
  126. byteplussdkkickart/models/get_block_detail_response.py +123 -0
  127. byteplussdkkickart/models/get_block_request.py +124 -0
  128. byteplussdkkickart/models/get_block_response.py +123 -0
  129. byteplussdkkickart/models/get_category_detail_request.py +201 -0
  130. byteplussdkkickart/models/get_category_detail_response.py +123 -0
  131. byteplussdkkickart/models/get_combo_balance_request.py +124 -0
  132. byteplussdkkickart/models/get_combo_balance_response.py +149 -0
  133. byteplussdkkickart/models/get_composition_request.py +123 -0
  134. byteplussdkkickart/models/get_composition_response.py +253 -0
  135. byteplussdkkickart/models/get_create_cost_request.py +123 -0
  136. byteplussdkkickart/models/get_create_cost_response.py +123 -0
  137. byteplussdkkickart/models/get_creator_info_request.py +123 -0
  138. byteplussdkkickart/models/get_creator_info_response.py +123 -0
  139. byteplussdkkickart/models/get_draft_request.py +123 -0
  140. byteplussdkkickart/models/get_draft_response.py +123 -0
  141. byteplussdkkickart/models/get_film_detail_request.py +175 -0
  142. byteplussdkkickart/models/get_film_detail_response.py +123 -0
  143. byteplussdkkickart/models/get_genius_project_request.py +124 -0
  144. byteplussdkkickart/models/get_genius_project_response.py +123 -0
  145. byteplussdkkickart/models/get_genius_template_request.py +123 -0
  146. byteplussdkkickart/models/get_genius_template_response.py +123 -0
  147. byteplussdkkickart/models/get_home_bootstrap2_request.py +149 -0
  148. byteplussdkkickart/models/get_home_bootstrap2_response.py +253 -0
  149. byteplussdkkickart/models/get_home_bootstrap_request.py +149 -0
  150. byteplussdkkickart/models/get_home_bootstrap_response.py +253 -0
  151. byteplussdkkickart/models/get_list_request.py +177 -0
  152. byteplussdkkickart/models/get_list_response.py +175 -0
  153. byteplussdkkickart/models/get_material_detail_request.py +227 -0
  154. byteplussdkkickart/models/get_material_detail_response.py +123 -0
  155. byteplussdkkickart/models/get_material_transcoding_list_request.py +331 -0
  156. byteplussdkkickart/models/get_material_transcoding_list_response.py +149 -0
  157. byteplussdkkickart/models/get_media_request.py +123 -0
  158. byteplussdkkickart/models/get_media_response.py +123 -0
  159. byteplussdkkickart/models/get_meta_list_request.py +201 -0
  160. byteplussdkkickart/models/get_meta_list_response.py +175 -0
  161. byteplussdkkickart/models/get_price_request.py +123 -0
  162. byteplussdkkickart/models/get_price_response.py +123 -0
  163. byteplussdkkickart/models/get_product_info_request.py +123 -0
  164. byteplussdkkickart/models/get_product_info_response.py +149 -0
  165. byteplussdkkickart/models/get_public_template_list_request.py +436 -0
  166. byteplussdkkickart/models/get_public_template_list_response.py +149 -0
  167. byteplussdkkickart/models/get_publish_draft_by_task_request.py +124 -0
  168. byteplussdkkickart/models/get_publish_draft_by_task_response.py +149 -0
  169. byteplussdkkickart/models/get_publish_draft_request.py +175 -0
  170. byteplussdkkickart/models/get_publish_draft_response.py +149 -0
  171. byteplussdkkickart/models/get_raw_api_key_request.py +123 -0
  172. byteplussdkkickart/models/get_raw_api_key_response.py +123 -0
  173. byteplussdkkickart/models/get_special_zone_config_request.py +124 -0
  174. byteplussdkkickart/models/get_special_zone_config_response.py +227 -0
  175. byteplussdkkickart/models/get_task_item_request.py +149 -0
  176. byteplussdkkickart/models/get_task_item_response.py +565 -0
  177. byteplussdkkickart/models/get_tasks_detail_request.py +123 -0
  178. byteplussdkkickart/models/get_tasks_detail_response.py +123 -0
  179. byteplussdkkickart/models/get_tenant_config_request.py +124 -0
  180. byteplussdkkickart/models/get_tenant_config_response.py +929 -0
  181. byteplussdkkickart/models/get_voice_recommendation_request.py +227 -0
  182. byteplussdkkickart/models/get_voice_recommendation_response.py +123 -0
  183. byteplussdkkickart/models/get_watermark_switch_status_request.py +124 -0
  184. byteplussdkkickart/models/get_watermark_switch_status_response.py +253 -0
  185. byteplussdkkickart/models/handle_o_auth_callback_request.py +177 -0
  186. byteplussdkkickart/models/handle_o_auth_callback_response.py +123 -0
  187. byteplussdkkickart/models/health_check_request.py +123 -0
  188. byteplussdkkickart/models/health_check_response.py +123 -0
  189. byteplussdkkickart/models/invoke_project_event_request.py +201 -0
  190. byteplussdkkickart/models/invoke_project_event_response.py +123 -0
  191. byteplussdkkickart/models/list_api_key_request.py +149 -0
  192. byteplussdkkickart/models/list_api_key_response.py +201 -0
  193. byteplussdkkickart/models/list_avatar_request.py +201 -0
  194. byteplussdkkickart/models/list_avatar_response.py +201 -0
  195. byteplussdkkickart/models/list_avatar_voice_request.py +279 -0
  196. byteplussdkkickart/models/list_avatar_voice_response.py +201 -0
  197. byteplussdkkickart/models/list_block_request.py +201 -0
  198. byteplussdkkickart/models/list_block_response.py +149 -0
  199. byteplussdkkickart/models/list_combo_request.py +149 -0
  200. byteplussdkkickart/models/list_combo_response.py +149 -0
  201. byteplussdkkickart/models/list_create_cost_request.py +149 -0
  202. byteplussdkkickart/models/list_create_cost_response.py +123 -0
  203. byteplussdkkickart/models/list_creative_point_logs_request.py +253 -0
  204. byteplussdkkickart/models/list_creative_point_logs_response.py +149 -0
  205. byteplussdkkickart/models/list_genius_project_request.py +149 -0
  206. byteplussdkkickart/models/list_genius_project_response.py +149 -0
  207. byteplussdkkickart/models/list_genius_template_request.py +175 -0
  208. byteplussdkkickart/models/list_genius_template_response.py +149 -0
  209. byteplussdkkickart/models/list_prompt_request.py +95 -0
  210. byteplussdkkickart/models/list_prompt_response.py +123 -0
  211. byteplussdkkickart/models/list_publish_accounts_request.py +149 -0
  212. byteplussdkkickart/models/list_publish_accounts_response.py +123 -0
  213. byteplussdkkickart/models/list_resources_request.py +95 -0
  214. byteplussdkkickart/models/list_resources_response.py +123 -0
  215. byteplussdkkickart/models/list_select_item_request.py +123 -0
  216. byteplussdkkickart/models/list_select_item_response.py +149 -0
  217. byteplussdkkickart/models/list_tasks_request.py +177 -0
  218. byteplussdkkickart/models/list_tasks_response.py +175 -0
  219. byteplussdkkickart/models/query_creative_point_logs_request.py +253 -0
  220. byteplussdkkickart/models/query_creative_point_logs_response.py +149 -0
  221. byteplussdkkickart/models/query_select_item_request.py +123 -0
  222. byteplussdkkickart/models/query_select_item_response.py +149 -0
  223. byteplussdkkickart/models/reorder_check_request.py +123 -0
  224. byteplussdkkickart/models/reorder_check_response.py +123 -0
  225. byteplussdkkickart/models/retry_risk_task_request.py +123 -0
  226. byteplussdkkickart/models/retry_risk_task_response.py +123 -0
  227. byteplussdkkickart/models/retry_task_request.py +149 -0
  228. byteplussdkkickart/models/retry_task_response.py +123 -0
  229. byteplussdkkickart/models/save_publish_draft_request.py +149 -0
  230. byteplussdkkickart/models/save_publish_draft_response.py +123 -0
  231. byteplussdkkickart/models/search_asset_request.py +487 -0
  232. byteplussdkkickart/models/search_asset_response.py +201 -0
  233. byteplussdkkickart/models/search_list_media_request.py +617 -0
  234. byteplussdkkickart/models/search_list_media_response.py +201 -0
  235. byteplussdkkickart/models/set_watermark_switch_status_request.py +253 -0
  236. byteplussdkkickart/models/set_watermark_switch_status_response.py +95 -0
  237. byteplussdkkickart/models/show_popup_request.py +124 -0
  238. byteplussdkkickart/models/show_popup_response.py +175 -0
  239. byteplussdkkickart/models/submit_publish_request.py +124 -0
  240. byteplussdkkickart/models/submit_publish_response.py +123 -0
  241. byteplussdkkickart/models/unbind_publish_account_request.py +124 -0
  242. byteplussdkkickart/models/unbind_publish_account_response.py +95 -0
  243. byteplussdkkickart/models/update_api_key_request.py +175 -0
  244. byteplussdkkickart/models/update_api_key_response.py +95 -0
  245. byteplussdkkickart/models/update_asset_request.py +149 -0
  246. byteplussdkkickart/models/update_asset_response.py +95 -0
  247. byteplussdkkickart/models/update_composition_product_info_request.py +151 -0
  248. byteplussdkkickart/models/update_composition_product_info_response.py +123 -0
  249. byteplussdkkickart/models/update_composition_request.py +149 -0
  250. byteplussdkkickart/models/update_composition_response.py +123 -0
  251. byteplussdkkickart/models/update_draft_request.py +227 -0
  252. byteplussdkkickart/models/update_draft_response.py +95 -0
  253. byteplussdkkickart/models/update_draft_title_request.py +151 -0
  254. byteplussdkkickart/models/update_draft_title_response.py +123 -0
  255. byteplussdkkickart/models/update_film_request.py +435 -0
  256. byteplussdkkickart/models/update_film_response.py +95 -0
  257. byteplussdkkickart/models/update_folder_media_path_request.py +175 -0
  258. byteplussdkkickart/models/update_folder_media_path_response.py +95 -0
  259. byteplussdkkickart/models/update_material_request.py +513 -0
  260. byteplussdkkickart/models/update_material_response.py +95 -0
  261. byteplussdkkickart/models/validate_avatar_image_request.py +123 -0
  262. byteplussdkkickart/models/validate_avatar_image_response.py +149 -0
  263. byteplussdkllmshield/models/llm_shield_sign.py +1 -1
  264. byteplussdkrdsmssql/__init__.py +1 -1
  265. byteplussdkrdsmssql/models/__init__.py +1 -1
  266. byteplussdkrdsmssql/models/describe_db_instance_specs_response.py +17 -17
  267. byteplussdkrdsmssql/models/{instance_spec_info_for_describe_db_instance_specs_output.py → instance_specs_info_for_describe_db_instance_specs_output.py} +45 -45
  268. byteplussdkvepfs/__init__.py +26 -0
  269. byteplussdkvepfs/api/vepfs_api.py +582 -0
  270. byteplussdkvepfs/models/__init__.py +26 -0
  271. byteplussdkvepfs/models/add_mount_service_clients_request.py +202 -0
  272. byteplussdkvepfs/models/add_mount_service_clients_response.py +123 -0
  273. byteplussdkvepfs/models/client_for_add_mount_service_clients_input.py +149 -0
  274. byteplussdkvepfs/models/client_for_describe_mount_service_tasks_output.py +149 -0
  275. byteplussdkvepfs/models/client_for_remove_mount_service_clients_input.py +149 -0
  276. byteplussdkvepfs/models/client_for_verify_mount_service_clients_input.py +149 -0
  277. byteplussdkvepfs/models/client_snapshot_for_describe_mount_service_task_results_output.py +305 -0
  278. byteplussdkvepfs/models/describe_lens_tasks_request.py +60 -1
  279. byteplussdkvepfs/models/describe_mount_service_clients_request.py +440 -0
  280. byteplussdkvepfs/models/describe_mount_service_clients_response.py +201 -0
  281. byteplussdkvepfs/models/describe_mount_service_task_results_request.py +415 -0
  282. byteplussdkvepfs/models/describe_mount_service_task_results_response.py +201 -0
  283. byteplussdkvepfs/models/describe_mount_service_tasks_request.py +267 -0
  284. byteplussdkvepfs/models/describe_mount_service_tasks_response.py +201 -0
  285. byteplussdkvepfs/models/instance_for_describe_mount_service_clients_output.py +253 -0
  286. byteplussdkvepfs/models/instance_for_describe_mount_service_task_results_output.py +253 -0
  287. byteplussdkvepfs/models/monitor_for_describe_mount_service_clients_output.py +123 -0
  288. byteplussdkvepfs/models/monitor_for_describe_mount_service_task_results_output.py +123 -0
  289. byteplussdkvepfs/models/mount_service_client_for_describe_mount_service_clients_output.py +305 -0
  290. byteplussdkvepfs/models/mount_service_task_result_for_describe_mount_service_task_results_output.py +201 -0
  291. byteplussdkvepfs/models/progress_for_describe_mount_service_tasks_output.py +201 -0
  292. byteplussdkvepfs/models/remove_mount_service_clients_request.py +150 -0
  293. byteplussdkvepfs/models/remove_mount_service_clients_response.py +123 -0
  294. byteplussdkvepfs/models/result_for_verify_mount_service_clients_output.py +175 -0
  295. byteplussdkvepfs/models/task_for_describe_mount_service_tasks_output.py +305 -0
  296. byteplussdkvepfs/models/verify_mount_service_clients_request.py +150 -0
  297. byteplussdkvepfs/models/verify_mount_service_clients_response.py +123 -0
  298. byteplussdkvke/__init__.py +69 -0
  299. byteplussdkvke/api/vke_api.py +1273 -206
  300. byteplussdkvke/models/__init__.py +69 -0
  301. byteplussdkvke/models/action_for_list_remedy_configs_output.py +149 -0
  302. byteplussdkvke/models/affinity_group_config_for_create_node_pool_input.py +149 -0
  303. byteplussdkvke/models/affinity_group_config_for_list_node_pools_output.py +149 -0
  304. byteplussdkvke/models/affinity_group_config_for_update_node_pool_config_input.py +149 -0
  305. byteplussdkvke/models/binding_remedy_config_request.py +262 -0
  306. byteplussdkvke/models/binding_remedy_config_response.py +123 -0
  307. byteplussdkvke/models/cluster_config_for_list_clusters_output.py +27 -1
  308. byteplussdkvke/models/cluster_config_for_update_cluster_config_input.py +53 -1
  309. byteplussdkvke/models/cluster_connector_config_request_for_update_cluster_config_input.py +215 -0
  310. byteplussdkvke/models/config_for_list_remedy_configs_output.py +253 -0
  311. byteplussdkvke/models/container_image_commitment_for_describe_container_image_commitments_output.py +227 -0
  312. byteplussdkvke/models/containerd_config_for_create_default_node_pool_input.py +149 -0
  313. byteplussdkvke/models/containerd_config_for_create_node_pool_input.py +149 -0
  314. byteplussdkvke/models/containerd_config_for_list_node_pools_output.py +149 -0
  315. byteplussdkvke/models/containerd_config_for_update_node_pool_config_input.py +149 -0
  316. byteplussdkvke/models/create_node_pool_request.py +27 -1
  317. byteplussdkvke/models/create_nodes_request.py +81 -3
  318. byteplussdkvke/models/create_snapshot_request.py +255 -0
  319. byteplussdkvke/models/create_snapshot_response.py +123 -0
  320. byteplussdkvke/models/data_volume_for_create_node_pool_input.py +87 -2
  321. byteplussdkvke/models/data_volume_for_list_node_pools_output.py +79 -1
  322. byteplussdkvke/models/data_volume_for_update_node_pool_config_input.py +87 -2
  323. byteplussdkvke/models/delete_nodes_request.py +2 -3
  324. byteplussdkvke/models/delete_snapshot_request.py +124 -0
  325. byteplussdkvke/models/delete_snapshot_response.py +123 -0
  326. byteplussdkvke/models/describe_container_image_commitments_request.py +227 -0
  327. byteplussdkvke/models/describe_container_image_commitments_response.py +149 -0
  328. byteplussdkvke/models/describe_snapshots_request.py +175 -0
  329. byteplussdkvke/models/describe_snapshots_response.py +149 -0
  330. byteplussdkvke/models/drain_for_list_remedy_configs_output.py +123 -0
  331. byteplussdkvke/models/eviction_hard_for_create_default_node_pool_input.py +62 -1
  332. byteplussdkvke/models/eviction_hard_for_create_node_pool_input.py +62 -1
  333. byteplussdkvke/models/eviction_hard_for_list_node_pools_output.py +55 -1
  334. byteplussdkvke/models/eviction_hard_for_update_node_pool_config_input.py +62 -1
  335. byteplussdkvke/models/exec_container_image_commitment_request.py +27 -1
  336. byteplussdkvke/models/exec_container_image_commitment_response.py +29 -1
  337. byteplussdkvke/models/filter_for_list_clusters_input.py +1 -1
  338. byteplussdkvke/models/filter_for_list_nodes_input.py +53 -1
  339. byteplussdkvke/models/filter_for_list_remedy_configs_input.py +234 -0
  340. byteplussdkvke/models/flannel_config_for_list_clusters_output.py +29 -3
  341. byteplussdkvke/models/flannel_config_for_update_cluster_config_input.py +123 -0
  342. byteplussdkvke/models/image_spec_for_describe_container_image_commitments_output.py +201 -0
  343. byteplussdkvke/models/instances_distribution_for_create_node_pool_input.py +201 -0
  344. byteplussdkvke/models/instances_distribution_for_list_node_pools_output.py +201 -0
  345. byteplussdkvke/models/instances_distribution_for_update_node_pool_config_input.py +201 -0
  346. byteplussdkvke/models/intersection_item_for_list_supported_images_output.py +149 -0
  347. byteplussdkvke/models/intervene_cordon_for_list_remedy_configs_output.py +149 -0
  348. byteplussdkvke/models/intervene_drain_for_list_remedy_configs_output.py +149 -0
  349. byteplussdkvke/models/irsa_config_for_list_clusters_output.py +253 -0
  350. byteplussdkvke/models/item_for_list_clusters_output.py +27 -1
  351. byteplussdkvke/models/item_for_list_instance_type_labels_output.py +175 -0
  352. byteplussdkvke/models/item_for_list_node_pools_output.py +27 -1
  353. byteplussdkvke/models/item_for_list_nodes_output.py +105 -1
  354. byteplussdkvke/models/item_for_list_remedy_configs_output.py +305 -0
  355. byteplussdkvke/models/item_for_list_supported_images_output.py +149 -0
  356. byteplussdkvke/models/kube_reserved_for_create_default_node_pool_input.py +7 -0
  357. byteplussdkvke/models/kube_reserved_for_create_node_pool_input.py +7 -0
  358. byteplussdkvke/models/kube_reserved_for_update_node_pool_config_input.py +7 -0
  359. byteplussdkvke/models/kubelet_config_for_create_default_node_pool_input.py +7 -24
  360. byteplussdkvke/models/kubelet_config_for_create_node_pool_input.py +7 -24
  361. byteplussdkvke/models/kubelet_config_for_update_node_pool_config_input.py +7 -24
  362. byteplussdkvke/models/kubernetes_config_for_create_default_node_pool_input.py +105 -1
  363. byteplussdkvke/models/kubernetes_config_for_create_node_pool_input.py +105 -1
  364. byteplussdkvke/models/kubernetes_config_for_list_node_pools_output.py +105 -1
  365. byteplussdkvke/models/kubernetes_config_for_update_node_pool_config_input.py +105 -1
  366. byteplussdkvke/models/label_for_list_instance_type_labels_output.py +149 -0
  367. byteplussdkvke/models/label_for_list_remedy_configs_output.py +149 -0
  368. byteplussdkvke/models/list_instance_type_labels_request.py +123 -0
  369. byteplussdkvke/models/list_instance_type_labels_response.py +123 -0
  370. byteplussdkvke/models/list_remedy_configs_request.py +175 -0
  371. byteplussdkvke/models/list_remedy_configs_response.py +201 -0
  372. byteplussdkvke/models/list_supported_add_instance_types_request.py +95 -0
  373. byteplussdkvke/models/list_supported_add_instance_types_response.py +123 -0
  374. byteplussdkvke/models/list_supported_gpu_driver_versions_request.py +176 -0
  375. byteplussdkvke/models/list_supported_gpu_driver_versions_response.py +123 -0
  376. byteplussdkvke/models/list_supported_images_request.py +175 -0
  377. byteplussdkvke/models/list_supported_images_response.py +149 -0
  378. byteplussdkvke/models/log_setup_for_create_cluster_input.py +1 -1
  379. byteplussdkvke/models/log_setup_for_update_cluster_config_input.py +1 -1
  380. byteplussdkvke/models/management_for_create_node_pool_input.py +149 -0
  381. byteplussdkvke/models/management_for_list_node_pools_output.py +149 -0
  382. byteplussdkvke/models/management_for_update_node_pool_config_input.py +149 -0
  383. byteplussdkvke/models/monitoring_config_for_list_clusters_output.py +27 -1
  384. byteplussdkvke/models/monitoring_config_for_update_cluster_config_input.py +27 -1
  385. byteplussdkvke/models/node_config_for_create_default_node_pool_input.py +27 -1
  386. byteplussdkvke/models/node_config_for_create_node_pool_input.py +216 -1
  387. byteplussdkvke/models/node_config_for_list_node_pools_output.py +209 -1
  388. byteplussdkvke/models/node_config_for_update_node_pool_config_input.py +216 -1
  389. byteplussdkvke/models/pods_config_for_update_cluster_config_input.py +27 -1
  390. byteplussdkvke/models/proxy_config_for_update_cluster_config_input.py +227 -0
  391. byteplussdkvke/models/public_access_config_for_create_node_pool_input.py +1 -1
  392. byteplussdkvke/models/public_access_config_for_update_node_pool_config_input.py +1 -1
  393. byteplussdkvke/models/public_access_network_config_for_create_cluster_input.py +1 -1
  394. byteplussdkvke/models/public_access_network_config_for_update_cluster_config_input.py +1 -1
  395. byteplussdkvke/models/registry_proxy_config_for_create_default_node_pool_input.py +149 -0
  396. byteplussdkvke/models/registry_proxy_config_for_create_node_pool_input.py +149 -0
  397. byteplussdkvke/models/registry_proxy_config_for_list_node_pools_output.py +149 -0
  398. byteplussdkvke/models/registry_proxy_config_for_update_node_pool_config_input.py +149 -0
  399. byteplussdkvke/models/remedy_config_for_create_node_pool_input.py +149 -0
  400. byteplussdkvke/models/remedy_config_for_list_node_pools_output.py +149 -0
  401. byteplussdkvke/models/remedy_config_for_update_node_pool_config_input.py +149 -0
  402. byteplussdkvke/models/remedy_strategy_for_list_remedy_configs_output.py +149 -0
  403. byteplussdkvke/models/rule_for_list_remedy_configs_output.py +175 -0
  404. byteplussdkvke/models/runtime_for_create_default_node_pool_input.py +156 -0
  405. byteplussdkvke/models/runtime_for_create_node_pool_input.py +156 -0
  406. byteplussdkvke/models/runtime_for_list_node_pools_output.py +149 -0
  407. byteplussdkvke/models/runtime_for_update_node_pool_config_input.py +156 -0
  408. byteplussdkvke/models/scheduled_instance_policy_for_create_scaling_policy_input.py +27 -1
  409. byteplussdkvke/models/scheduled_instance_policy_for_list_scaling_policies_output.py +27 -1
  410. byteplussdkvke/models/scheduled_instance_policy_for_update_scaling_policy_input.py +27 -1
  411. byteplussdkvke/models/snapshot_for_describe_snapshots_output.py +461 -0
  412. byteplussdkvke/models/status_for_list_clusters_input.py +1 -1
  413. byteplussdkvke/models/status_for_list_node_pools_input.py +1 -1
  414. byteplussdkvke/models/status_for_list_nodes_input.py +2 -2
  415. byteplussdkvke/models/supported_image_for_list_supported_images_output.py +149 -0
  416. byteplussdkvke/models/system_reserved_for_create_default_node_pool_input.py +7 -0
  417. byteplussdkvke/models/system_reserved_for_create_node_pool_input.py +7 -0
  418. byteplussdkvke/models/system_reserved_for_update_node_pool_config_input.py +7 -0
  419. byteplussdkvke/models/system_volume_for_create_node_pool_input.py +1 -1
  420. byteplussdkvke/models/system_volume_for_update_node_pool_config_input.py +1 -1
  421. byteplussdkvke/models/tag_for_create_snapshot_input.py +149 -0
  422. byteplussdkvke/models/unbinding_remedy_config_request.py +211 -0
  423. byteplussdkvke/models/unbinding_remedy_config_response.py +95 -0
  424. byteplussdkvke/models/update_cluster_config_request.py +27 -1
  425. byteplussdkvke/models/update_node_pool_config_request.py +27 -1
  426. byteplussdkvke/models/vpc_cni_config_for_list_clusters_output.py +29 -3
  427. byteplussdkvke/models/vpc_cni_config_for_update_cluster_config_input.py +29 -3
  428. byteplussdkvpc20250901/__init__.py +149 -0
  429. byteplussdkvpc20250901/api/__init__.py +6 -0
  430. byteplussdkvpc20250901/api/vpc20250901_api.py +4399 -0
  431. byteplussdkvpc20250901/models/__init__.py +145 -0
  432. byteplussdkvpc20250901/models/assign_private_ip_addresses_request.py +202 -0
  433. byteplussdkvpc20250901/models/assign_private_ip_addresses_response.py +201 -0
  434. byteplussdkvpc20250901/models/associate_route_table_request.py +176 -0
  435. byteplussdkvpc20250901/models/associate_route_table_response.py +149 -0
  436. byteplussdkvpc20250901/models/associate_vpc_cidr_block_request.py +150 -0
  437. byteplussdkvpc20250901/models/associate_vpc_cidr_block_response.py +201 -0
  438. byteplussdkvpc20250901/models/associated_elastic_ip_for_describe_network_interface_attributes_output.py +175 -0
  439. byteplussdkvpc20250901/models/associated_elastic_ip_for_describe_network_interfaces_output.py +175 -0
  440. byteplussdkvpc20250901/models/attach_network_interface_request.py +151 -0
  441. byteplussdkvpc20250901/models/attach_network_interface_response.py +149 -0
  442. byteplussdkvpc20250901/models/attachment_for_describe_network_interfaces_output.py +149 -0
  443. byteplussdkvpc20250901/models/authorize_security_group_egress_request.py +309 -0
  444. byteplussdkvpc20250901/models/authorize_security_group_egress_response.py +149 -0
  445. byteplussdkvpc20250901/models/authorize_security_group_ingress_request.py +309 -0
  446. byteplussdkvpc20250901/models/authorize_security_group_ingress_response.py +149 -0
  447. byteplussdkvpc20250901/models/create_network_interface_request.py +396 -0
  448. byteplussdkvpc20250901/models/create_network_interface_response.py +175 -0
  449. byteplussdkvpc20250901/models/create_route_entry_request.py +294 -0
  450. byteplussdkvpc20250901/models/create_route_entry_response.py +175 -0
  451. byteplussdkvpc20250901/models/create_route_table_request.py +266 -0
  452. byteplussdkvpc20250901/models/create_route_table_response.py +175 -0
  453. byteplussdkvpc20250901/models/create_security_group_request.py +254 -0
  454. byteplussdkvpc20250901/models/create_security_group_response.py +175 -0
  455. byteplussdkvpc20250901/models/create_subnet_request.py +294 -0
  456. byteplussdkvpc20250901/models/create_subnet_response.py +175 -0
  457. byteplussdkvpc20250901/models/create_vpc_request.py +292 -0
  458. byteplussdkvpc20250901/models/create_vpc_response.py +201 -0
  459. byteplussdkvpc20250901/models/delete_network_interface_request.py +124 -0
  460. byteplussdkvpc20250901/models/delete_network_interface_response.py +149 -0
  461. byteplussdkvpc20250901/models/delete_route_entry_request.py +124 -0
  462. byteplussdkvpc20250901/models/delete_route_entry_response.py +149 -0
  463. byteplussdkvpc20250901/models/delete_route_table_request.py +124 -0
  464. byteplussdkvpc20250901/models/delete_route_table_response.py +149 -0
  465. byteplussdkvpc20250901/models/delete_security_group_request.py +124 -0
  466. byteplussdkvpc20250901/models/delete_security_group_response.py +149 -0
  467. byteplussdkvpc20250901/models/delete_subnet_request.py +124 -0
  468. byteplussdkvpc20250901/models/delete_subnet_response.py +149 -0
  469. byteplussdkvpc20250901/models/delete_vpc_request.py +124 -0
  470. byteplussdkvpc20250901/models/delete_vpc_response.py +149 -0
  471. byteplussdkvpc20250901/models/describe_network_interface_attributes_request.py +124 -0
  472. byteplussdkvpc20250901/models/describe_network_interface_attributes_response.py +695 -0
  473. byteplussdkvpc20250901/models/describe_network_interfaces_request.py +548 -0
  474. byteplussdkvpc20250901/models/describe_network_interfaces_response.py +253 -0
  475. byteplussdkvpc20250901/models/describe_route_entry_list_request.py +393 -0
  476. byteplussdkvpc20250901/models/describe_route_entry_list_response.py +253 -0
  477. byteplussdkvpc20250901/models/describe_route_table_list_request.py +334 -0
  478. byteplussdkvpc20250901/models/describe_route_table_list_response.py +253 -0
  479. byteplussdkvpc20250901/models/describe_security_group_attributes_request.py +228 -0
  480. byteplussdkvpc20250901/models/describe_security_group_attributes_response.py +461 -0
  481. byteplussdkvpc20250901/models/describe_security_groups_request.py +340 -0
  482. byteplussdkvpc20250901/models/describe_security_groups_response.py +253 -0
  483. byteplussdkvpc20250901/models/describe_subnet_attributes_request.py +124 -0
  484. byteplussdkvpc20250901/models/describe_subnet_attributes_response.py +539 -0
  485. byteplussdkvpc20250901/models/describe_subnets_request.py +438 -0
  486. byteplussdkvpc20250901/models/describe_subnets_response.py +253 -0
  487. byteplussdkvpc20250901/models/describe_vpc_attributes_request.py +124 -0
  488. byteplussdkvpc20250901/models/describe_vpc_attributes_response.py +565 -0
  489. byteplussdkvpc20250901/models/describe_vpcs_request.py +366 -0
  490. byteplussdkvpc20250901/models/describe_vpcs_response.py +253 -0
  491. byteplussdkvpc20250901/models/detach_network_interface_request.py +151 -0
  492. byteplussdkvpc20250901/models/detach_network_interface_response.py +149 -0
  493. byteplussdkvpc20250901/models/disassociate_route_table_request.py +176 -0
  494. byteplussdkvpc20250901/models/disassociate_route_table_response.py +149 -0
  495. byteplussdkvpc20250901/models/disassociate_vpc_cidr_block_request.py +150 -0
  496. byteplussdkvpc20250901/models/disassociate_vpc_cidr_block_response.py +149 -0
  497. byteplussdkvpc20250901/models/list_tags_for_resources_request.py +264 -0
  498. byteplussdkvpc20250901/models/list_tags_for_resources_response.py +175 -0
  499. byteplussdkvpc20250901/models/modify_network_interface_attributes_request.py +266 -0
  500. byteplussdkvpc20250901/models/modify_network_interface_attributes_response.py +149 -0
  501. byteplussdkvpc20250901/models/modify_route_entry_request.py +188 -0
  502. byteplussdkvpc20250901/models/modify_route_entry_response.py +123 -0
  503. byteplussdkvpc20250901/models/modify_route_table_attributes_request.py +188 -0
  504. byteplussdkvpc20250901/models/modify_route_table_attributes_response.py +123 -0
  505. byteplussdkvpc20250901/models/modify_security_group_attributes_request.py +176 -0
  506. byteplussdkvpc20250901/models/modify_security_group_attributes_response.py +123 -0
  507. byteplussdkvpc20250901/models/modify_security_group_rule_descriptions_egress_request.py +283 -0
  508. byteplussdkvpc20250901/models/modify_security_group_rule_descriptions_egress_response.py +123 -0
  509. byteplussdkvpc20250901/models/modify_security_group_rule_descriptions_ingress_request.py +283 -0
  510. byteplussdkvpc20250901/models/modify_security_group_rule_descriptions_ingress_response.py +123 -0
  511. byteplussdkvpc20250901/models/modify_subnet_attributes_request.py +188 -0
  512. byteplussdkvpc20250901/models/modify_subnet_attributes_response.py +149 -0
  513. byteplussdkvpc20250901/models/modify_vpc_attributes_request.py +214 -0
  514. byteplussdkvpc20250901/models/modify_vpc_attributes_response.py +149 -0
  515. byteplussdkvpc20250901/models/network_interface_set_for_describe_network_interfaces_output.py +695 -0
  516. byteplussdkvpc20250901/models/permission_for_describe_security_group_attributes_output.py +331 -0
  517. byteplussdkvpc20250901/models/private_ip_set_for_describe_network_interface_attributes_output.py +175 -0
  518. byteplussdkvpc20250901/models/private_ip_set_for_describe_network_interfaces_output.py +175 -0
  519. byteplussdkvpc20250901/models/private_ip_sets_for_describe_network_interface_attributes_output.py +123 -0
  520. byteplussdkvpc20250901/models/private_ip_sets_for_describe_network_interfaces_output.py +123 -0
  521. byteplussdkvpc20250901/models/resource_tag_for_list_tags_for_resources_output.py +201 -0
  522. byteplussdkvpc20250901/models/revoke_security_group_egress_request.py +283 -0
  523. byteplussdkvpc20250901/models/revoke_security_group_egress_response.py +149 -0
  524. byteplussdkvpc20250901/models/revoke_security_group_ingress_request.py +283 -0
  525. byteplussdkvpc20250901/models/revoke_security_group_ingress_response.py +149 -0
  526. byteplussdkvpc20250901/models/route_entry_for_describe_route_entry_list_output.py +357 -0
  527. byteplussdkvpc20250901/models/route_table_for_describe_subnet_attributes_output.py +149 -0
  528. byteplussdkvpc20250901/models/route_table_for_describe_subnets_output.py +149 -0
  529. byteplussdkvpc20250901/models/router_table_list_for_describe_route_table_list_output.py +435 -0
  530. byteplussdkvpc20250901/models/security_group_for_describe_security_groups_output.py +383 -0
  531. byteplussdkvpc20250901/models/subnet_for_describe_subnets_output.py +513 -0
  532. byteplussdkvpc20250901/models/tag_filter_for_describe_network_interfaces_input.py +149 -0
  533. byteplussdkvpc20250901/models/tag_filter_for_describe_route_table_list_input.py +149 -0
  534. byteplussdkvpc20250901/models/tag_filter_for_describe_security_groups_input.py +149 -0
  535. byteplussdkvpc20250901/models/tag_filter_for_describe_subnets_input.py +149 -0
  536. byteplussdkvpc20250901/models/tag_filter_for_describe_vpcs_input.py +149 -0
  537. byteplussdkvpc20250901/models/tag_filter_for_list_tags_for_resources_input.py +149 -0
  538. byteplussdkvpc20250901/models/tag_for_create_network_interface_input.py +149 -0
  539. byteplussdkvpc20250901/models/tag_for_create_route_table_input.py +149 -0
  540. byteplussdkvpc20250901/models/tag_for_create_security_group_input.py +149 -0
  541. byteplussdkvpc20250901/models/tag_for_create_subnet_input.py +149 -0
  542. byteplussdkvpc20250901/models/tag_for_create_vpc_input.py +149 -0
  543. byteplussdkvpc20250901/models/tag_for_describe_network_interface_attributes_output.py +149 -0
  544. byteplussdkvpc20250901/models/tag_for_describe_network_interfaces_output.py +149 -0
  545. byteplussdkvpc20250901/models/tag_for_describe_route_table_list_output.py +149 -0
  546. byteplussdkvpc20250901/models/tag_for_describe_security_group_attributes_output.py +149 -0
  547. byteplussdkvpc20250901/models/tag_for_describe_security_groups_output.py +149 -0
  548. byteplussdkvpc20250901/models/tag_for_describe_subnet_attributes_output.py +149 -0
  549. byteplussdkvpc20250901/models/tag_for_describe_subnets_output.py +149 -0
  550. byteplussdkvpc20250901/models/tag_for_describe_vpc_attributes_output.py +149 -0
  551. byteplussdkvpc20250901/models/tag_for_describe_vpcs_output.py +149 -0
  552. byteplussdkvpc20250901/models/tag_for_tag_resources_input.py +150 -0
  553. byteplussdkvpc20250901/models/tag_resources_request.py +183 -0
  554. byteplussdkvpc20250901/models/tag_resources_response.py +123 -0
  555. byteplussdkvpc20250901/models/unassign_private_ip_addresses_request.py +150 -0
  556. byteplussdkvpc20250901/models/unassign_private_ip_addresses_response.py +149 -0
  557. byteplussdkvpc20250901/models/untag_resources_request.py +183 -0
  558. byteplussdkvpc20250901/models/untag_resources_response.py +123 -0
  559. byteplussdkvpc20250901/models/vpc_for_describe_vpcs_output.py +539 -0
  560. {byteplus_python_sdk_v2-3.0.43.dist-info → byteplus_python_sdk_v2-3.0.45.dist-info}/WHEEL +0 -0
  561. {byteplus_python_sdk_v2-3.0.43.dist-info → byteplus_python_sdk_v2-3.0.45.dist-info}/licenses/LICENSE.txt +0 -0
  562. {byteplus_python_sdk_v2-3.0.43.dist-info → byteplus_python_sdk_v2-3.0.45.dist-info}/licenses/NOTICE.md +0 -0
@@ -0,0 +1,103 @@
1
+ # coding=utf-8
2
+ import logging
3
+ import os
4
+ import threading
5
+
6
+ from .provider import Provider
7
+
8
+ logger = logging.getLogger(__name__)
9
+
10
+ class DefaultCredentialProvider(Provider):
11
+ PROVIDER_NAME = "DefaultCredentialProvider"
12
+
13
+ def __init__(self, role_name=None,
14
+ reuse_last_provider_enabled=True,
15
+ providers=None):
16
+ if providers is not None:
17
+ self._providers = list(providers)
18
+ else:
19
+ from .env_provider import EnvironmentVariableCredentialProvider
20
+ from .sts_oidc_provider import StsOidcCredentialProvider
21
+ from .cli_config_provider import CLIConfigCredentialProvider
22
+ from .ecs_role_provider import EcsRoleCredentialProvider
23
+
24
+ self._providers = [
25
+ EnvironmentVariableCredentialProvider(),
26
+ StsOidcCredentialProvider(),
27
+ CLIConfigCredentialProvider(),
28
+ ]
29
+ if os.environ.get("BYTEPLUS_ECS_METADATA_DISABLED", "").lower() != "true":
30
+ self._providers.append(
31
+ EcsRoleCredentialProvider(role_name=role_name)
32
+ )
33
+ self._reuse_last_provider_enabled = reuse_last_provider_enabled
34
+ self._last_provider = None
35
+ self._lock = threading.Lock()
36
+
37
+ @staticmethod
38
+ def _truncate_error_message(err):
39
+ err_msg = str(err)
40
+ if len(err_msg) > 200:
41
+ return err_msg[:200] + "...(truncated)"
42
+ return err_msg
43
+
44
+ def _drop_cached_provider(self, provider, err, action):
45
+ logger.warning(
46
+ "%s: cached provider %s failed to %s (%s: %s); falling back to full chain",
47
+ self.PROVIDER_NAME,
48
+ type(provider).__name__,
49
+ action,
50
+ type(err).__name__,
51
+ self._truncate_error_message(err),
52
+ )
53
+ with self._lock:
54
+ self._last_provider = None
55
+
56
+ def retrieve(self):
57
+ return self.get_credentials()
58
+
59
+ def is_expired(self):
60
+ provider = self._last_provider
61
+ if provider is not None:
62
+ return provider.is_expired()
63
+ return True
64
+
65
+ def refresh(self):
66
+ provider = self._last_provider
67
+ if provider is not None:
68
+ try:
69
+ provider.refresh()
70
+ return
71
+ except Exception as e:
72
+ self._drop_cached_provider(provider, e, "refresh credentials")
73
+ self.get_credentials()
74
+
75
+ def get_credentials(self):
76
+ if self._reuse_last_provider_enabled:
77
+ provider = self._last_provider
78
+ if provider is not None:
79
+ try:
80
+ creds = provider.get_credentials()
81
+ if creds is not None:
82
+ return creds
83
+ except Exception as e:
84
+ self._drop_cached_provider(provider, e, "return credentials")
85
+
86
+ errors = []
87
+ for provider in self._providers:
88
+ try:
89
+ creds = provider.get_credentials()
90
+ if creds is not None:
91
+ if self._reuse_last_provider_enabled:
92
+ with self._lock:
93
+ self._last_provider = provider
94
+ return creds
95
+ except Exception as e:
96
+ errors.append("{}: {}".format(type(provider).__name__, str(e)))
97
+ continue
98
+
99
+ error_details = "\n ".join(errors) if errors else "no providers configured"
100
+ raise RuntimeError(
101
+ "{}: unable to resolve credentials from any provider in the chain.\n"
102
+ "Attempted providers:\n {}".format(self.PROVIDER_NAME, error_details)
103
+ )
@@ -0,0 +1,186 @@
1
+ # coding=utf-8
2
+ import json
3
+ import logging
4
+ import os
5
+ import threading
6
+ import time
7
+ from datetime import datetime
8
+
9
+ import dateutil.parser
10
+ import dateutil.tz
11
+
12
+ from .provider import Provider, CredentialValue
13
+
14
+ logger = logging.getLogger(__name__)
15
+
16
+ # ECS IMDSv2 endpoint and protocol
17
+ _IMDS_ENDPOINT = "http://100.96.0.96"
18
+ _IMDS_CREDENTIALS_PATH = "/volcstack/latest/iam/security_credentials/{role_name}" # GET
19
+ _IMDS_ROLE_NAME_PATH = "/volcstack/latest/iam/security_credentials?type=user&format=json" # GET
20
+ _IMDS_TOKEN_PATH = "/latest/api/token" # PUT
21
+
22
+ # ECS IMDSv2 headers
23
+ _IMDS_TOKEN_TTL_HEADER = "X-volc-ecs-metadata-token-ttl-seconds"
24
+ _IMDS_TOKEN_HEADER = "X-volc-ecs-metadata-token"
25
+ _IMDS_TOKEN_TTL_SECONDS = "21600" # 6 hours
26
+
27
+ # ECS IMDSv2 response field names
28
+ _FIELD_AK = "AccessKeyId"
29
+ _FIELD_SK = "SecretAccessKey"
30
+ _FIELD_TOKEN = "SessionToken"
31
+ _FIELD_EXPIRATION = "ExpiredTime"
32
+
33
+
34
+ class EcsRoleCredentialProvider(Provider):
35
+ PROVIDER_NAME = "EcsRoleCredentialProvider"
36
+
37
+ def __init__(self, role_name=None, connect_timeout=1, read_timeout=1,
38
+ max_retries=3, retry_interval=1, expired_buffer_seconds=300):
39
+ if os.environ.get("BYTEPLUS_ECS_METADATA_DISABLED", "").lower() == "true":
40
+ raise ValueError(
41
+ "{}: IMDS credentials are disabled via "
42
+ "BYTEPLUS_ECS_METADATA_DISABLED=true.".format(self.PROVIDER_NAME)
43
+ )
44
+
45
+ self._role_name = role_name
46
+ self._connect_timeout = connect_timeout
47
+ self._read_timeout = read_timeout
48
+ self._max_retries = max(max_retries, 1)
49
+ self._retry_interval = retry_interval
50
+ self._expired_buffer_seconds = expired_buffer_seconds
51
+
52
+ self._credentials = None
53
+ self._expired_time = None
54
+ self._lock = threading.Lock()
55
+
56
+ def retrieve(self):
57
+ return self._credentials
58
+
59
+ def is_expired(self):
60
+ return (self._credentials is None or
61
+ (self._expired_time is not None
62
+ and self._expired_time < time.time() + self._expired_buffer_seconds))
63
+
64
+ def refresh(self):
65
+ with self._lock:
66
+ if self.is_expired():
67
+ self._refresh_credentials()
68
+
69
+ def get_credentials(self):
70
+ self.refresh()
71
+ return self._credentials
72
+
73
+ def _get_imdsv2_token(self):
74
+ url = _IMDS_ENDPOINT + _IMDS_TOKEN_PATH
75
+ headers = {_IMDS_TOKEN_TTL_HEADER: _IMDS_TOKEN_TTL_SECONDS}
76
+ body = self._do_request(url, method="PUT", extra_headers=headers)
77
+ token = body.strip()
78
+ if not token:
79
+ raise RuntimeError(
80
+ "{}: IMDSv2 token endpoint returned empty response.".format(
81
+ self.PROVIDER_NAME
82
+ )
83
+ )
84
+ return token
85
+
86
+ def _resolve_role_name(self, imds_token):
87
+ if self._role_name:
88
+ return self._role_name
89
+
90
+ env_role = os.environ.get("BYTEPLUS_ECS_METADATA", "").strip()
91
+ if env_role:
92
+ return env_role
93
+
94
+ return self._auto_detect_role_name(imds_token)
95
+
96
+ def _auto_detect_role_name(self, imds_token):
97
+ url = _IMDS_ENDPOINT + _IMDS_ROLE_NAME_PATH
98
+ headers = {_IMDS_TOKEN_HEADER: imds_token}
99
+ body = self._do_request(url, method="GET", extra_headers=headers)
100
+
101
+ try:
102
+ roles = json.loads(body)
103
+ except ValueError:
104
+ roles = [r.strip() for r in body.strip().split('\n') if r.strip()]
105
+
106
+ if isinstance(roles, list):
107
+ roles = [r.strip() if isinstance(r, str) else str(r) for r in roles if r]
108
+ else:
109
+ raise RuntimeError(
110
+ "{}: unexpected role list response format: {}".format(
111
+ self.PROVIDER_NAME, type(roles).__name__
112
+ )
113
+ )
114
+
115
+ if not roles:
116
+ raise RuntimeError(
117
+ "{}: no IAM roles found via IMDS.".format(self.PROVIDER_NAME)
118
+ )
119
+
120
+ if len(roles) > 1:
121
+ logger.warning(
122
+ "%s: multiple IAM roles found via IMDS: %s. Using the first one '%s'. "
123
+ "Set BYTEPLUS_ECS_METADATA or pass role_name explicitly to avoid ambiguity.",
124
+ self.PROVIDER_NAME, roles, roles[0],
125
+ )
126
+
127
+ return roles[0]
128
+
129
+ def _refresh_credentials(self):
130
+ imds_token = self._get_imdsv2_token()
131
+ role_name = self._resolve_role_name(imds_token)
132
+
133
+ url = _IMDS_ENDPOINT + _IMDS_CREDENTIALS_PATH.format(role_name=role_name)
134
+ headers = {_IMDS_TOKEN_HEADER: imds_token}
135
+ body = self._do_request(url, method="GET", extra_headers=headers)
136
+
137
+ try:
138
+ data = json.loads(body)
139
+ except ValueError as e:
140
+ raise RuntimeError(
141
+ "{}: failed to parse IMDS response: {}".format(self.PROVIDER_NAME, e)
142
+ )
143
+
144
+ ak = data.get(_FIELD_AK)
145
+ sk = data.get(_FIELD_SK)
146
+ token = data.get(_FIELD_TOKEN)
147
+ expiration_str = data.get(_FIELD_EXPIRATION)
148
+
149
+ if not ak or not sk:
150
+ raise RuntimeError(
151
+ "{}: IMDS response missing required credential fields.".format(
152
+ self.PROVIDER_NAME
153
+ )
154
+ )
155
+
156
+ if expiration_str:
157
+ dt = dateutil.parser.parse(expiration_str)
158
+ self._expired_time = (
159
+ dt - datetime(1970, 1, 1, tzinfo=dateutil.tz.tzutc())
160
+ ).total_seconds()
161
+ else:
162
+ self._expired_time = None
163
+
164
+ self._credentials = CredentialValue(
165
+ ak=ak,
166
+ sk=sk,
167
+ session_token=token,
168
+ provider_name=self.PROVIDER_NAME,
169
+ )
170
+
171
+ def _do_request(self, url, method="GET", extra_headers=None):
172
+ """Perform an HTTP request with retries."""
173
+ # Late imports to avoid circular deps (auth.providers is imported
174
+ # indirectly by byteplussdkcore/__init__.py).
175
+ from byteplussdkcore import ApiClient, Configuration
176
+ timeout = self._connect_timeout + self._read_timeout
177
+ return ApiClient(Configuration())._do_http_request(
178
+ url=url,
179
+ method=method,
180
+ headers=extra_headers,
181
+ timeout=timeout,
182
+ max_retries=self._max_retries,
183
+ retry_interval=self._retry_interval,
184
+ request_name="IMDS request",
185
+ provider_name=self.PROVIDER_NAME,
186
+ )
@@ -0,0 +1,38 @@
1
+ # coding=utf-8
2
+ import os
3
+
4
+ from .provider import Provider, CredentialValue
5
+
6
+
7
+ class EnvironmentVariableCredentialProvider(Provider):
8
+ PROVIDER_NAME = "EnvironmentVariableCredentialProvider"
9
+
10
+ def retrieve(self):
11
+ return self.get_credentials()
12
+
13
+ def is_expired(self):
14
+ return False
15
+
16
+ def refresh(self):
17
+ return
18
+
19
+ def get_credentials(self):
20
+ ak = os.environ.get("BYTEPLUS_ACCESSKEY") or os.environ.get("BYTEPLUS_ACCESS_KEY")
21
+ sk = os.environ.get("BYTEPLUS_SECRETKEY") or os.environ.get("BYTEPLUS_SECRET_KEY")
22
+
23
+ if not ak or not sk:
24
+ raise RuntimeError(
25
+ "{}: unable to resolve credentials from environment variables. "
26
+ "Please set BYTEPLUS_ACCESSKEY and BYTEPLUS_SECRETKEY.".format(
27
+ self.PROVIDER_NAME
28
+ )
29
+ )
30
+
31
+ session_token = os.environ.get("BYTEPLUS_SESSION_TOKEN")
32
+
33
+ return CredentialValue(
34
+ ak=ak,
35
+ sk=sk,
36
+ session_token=session_token if session_token else None,
37
+ provider_name=self.PROVIDER_NAME,
38
+ )
@@ -1,5 +1,6 @@
1
1
  # coding=utf-8
2
2
  import abc
3
+ import json
3
4
 
4
5
 
5
6
  class CredentialValue:
@@ -11,6 +12,7 @@ class CredentialValue:
11
12
 
12
13
 
13
14
  class Provider(object):
15
+ PROVIDER_NAME = "Provider"
14
16
 
15
17
  @abc.abstractmethod
16
18
  def retrieve(self):
@@ -26,4 +28,37 @@ class Provider(object):
26
28
 
27
29
  @abc.abstractmethod
28
30
  def get_credentials(self):
29
- raise NotImplementedError()
31
+ raise NotImplementedError()
32
+
33
+ def _parse_json_response(self, content, response_name="response"):
34
+ try:
35
+ resp = json.loads(content)
36
+ except ValueError as e:
37
+ raise RuntimeError(
38
+ "{}: failed to parse {} as JSON: {}. raw={}".format(
39
+ self.PROVIDER_NAME, response_name, e, content
40
+ )
41
+ )
42
+
43
+ if not isinstance(resp, dict):
44
+ raise RuntimeError(
45
+ "{}: unexpected {} type: {}".format(
46
+ self.PROVIDER_NAME, response_name, type(resp).__name__
47
+ )
48
+ )
49
+
50
+ return resp
51
+
52
+ def _unwrap_result(self, resp, response_name="response"):
53
+ if 'Result' not in resp:
54
+ return resp
55
+
56
+ result = resp['Result']
57
+ if not isinstance(result, dict):
58
+ raise RuntimeError(
59
+ "{}: unexpected {}.Result type: {}".format(
60
+ self.PROVIDER_NAME, response_name, type(result).__name__
61
+ )
62
+ )
63
+
64
+ return result
@@ -4,9 +4,6 @@ from .provider import Provider, CredentialValue
4
4
 
5
5
  class StaticCredentialProvider(Provider):
6
6
 
7
- def _refresh(self):
8
- return
9
-
10
7
  def __init__(self, access_key_id, secret_access_key, session_token=None):
11
8
  self.credentials = CredentialValue(
12
9
  access_key_id,
@@ -23,3 +20,6 @@ class StaticCredentialProvider(Provider):
23
20
 
24
21
  def refresh(self):
25
22
  return
23
+
24
+ def get_credentials(self):
25
+ return self.credentials
@@ -1,11 +1,12 @@
1
+ import os
1
2
  import threading
2
3
  import time
3
4
  import uuid
4
5
  from datetime import datetime
5
6
 
6
7
  import dateutil.parser
8
+ import dateutil.tz
7
9
 
8
- from byteplussdkcore import UniversalApi, UniversalInfo, ApiClient, Configuration
9
10
  from .provider import Provider, CredentialValue
10
11
 
11
12
 
@@ -19,30 +20,70 @@ class AssumeRoleOidcCredentials:
19
20
 
20
21
 
21
22
  class StsOidcCredentialProvider(Provider):
22
- def __init__(self, role_name, account_id, oidc_token, duration_seconds=3600, scheme='https',
23
- host=None, region=None, timeout=30, expired_buffer_seconds=60, policy=None):
23
+ PROVIDER_NAME = "StsOidcCredentialProvider"
24
+
25
+ def __init__(self, role_name=None, account_id=None, oidc_token=None,
26
+ duration_seconds=3600, scheme='https',
27
+ host='sts.ap-southeast-1.byteplusapi.com', region='ap-southeast-1', timeout=30,
28
+ expired_buffer_seconds=60, policy=None,
29
+ role_trn=None, oidc_token_file=None, session_name=None,
30
+ max_retries=3, retry_interval=1):
31
+
32
+ self._legacy_mode = oidc_token is not None
33
+
34
+ if role_trn:
35
+ self._role_trn = role_trn
36
+ elif role_name and account_id:
37
+ self._role_trn = 'trn:iam::' + account_id + ':role/' + role_name
38
+ elif not self._legacy_mode:
39
+ env_trn = os.environ.get("BYTEPLUS_OIDC_ROLE_TRN", "")
40
+ self._role_trn = env_trn if env_trn else None
41
+ else:
42
+ self._role_trn = None
43
+
24
44
  self.role_name = role_name
25
45
  self.account_id = account_id
26
- self.oidc_token = oidc_token
46
+
47
+ self._oidc_token = oidc_token
48
+ if not self._legacy_mode:
49
+ self._oidc_token_file = oidc_token_file or os.environ.get("BYTEPLUS_OIDC_TOKEN_FILE", "") or None
50
+ else:
51
+ self._oidc_token_file = oidc_token_file
52
+
53
+ if session_name:
54
+ self._session_name = session_name
55
+ elif not self._legacy_mode:
56
+ self._session_name = os.environ.get("BYTEPLUS_OIDC_ROLE_SESSION_NAME", "") or None
57
+ else:
58
+ self._session_name = None
59
+
60
+ if policy is not None:
61
+ self.policy = policy
62
+ elif not self._legacy_mode:
63
+ self.policy = os.environ.get("BYTEPLUS_OIDC_ROLE_POLICY") or None
64
+ else:
65
+ self.policy = None
66
+
67
+ if host:
68
+ self.host = host
69
+ elif not self._legacy_mode:
70
+ self.host = os.environ.get("BYTEPLUS_OIDC_STS_ENDPOINT", "") or "sts.byteplusapi.com"
71
+ else:
72
+ self.host = "sts.byteplusapi.com"
27
73
 
28
74
  self.timeout = timeout
75
+ self.max_retries = max(max_retries, 1)
76
+ self.retry_interval = retry_interval
29
77
  self.duration_seconds = duration_seconds
30
-
31
- self.host = host
32
78
  self.region = region
33
79
  self.scheme = scheme
34
- self.policy = policy
35
- self.expired_time = None
36
- if host is None:
37
- raise ValueError('host is required')
38
- if region is None:
39
- raise ValueError('region is required')
80
+
40
81
  if expired_buffer_seconds > 600:
41
82
  raise ValueError('expired_buffer_seconds must be less than or equal to 600')
42
83
  self.expired_buffer_seconds = expired_buffer_seconds
43
84
 
85
+ self.expired_time = None
44
86
  self.credentials = None
45
-
46
87
  self._lock = threading.Lock()
47
88
 
48
89
  def retrieve(self):
@@ -61,39 +102,88 @@ class StsOidcCredentialProvider(Provider):
61
102
  self.refresh()
62
103
  return self.credentials
63
104
 
105
+ def _resolve_oidc_token(self):
106
+ if self._oidc_token:
107
+ return self._oidc_token
108
+
109
+ token_file = self._oidc_token_file
110
+ if not token_file:
111
+ raise RuntimeError(
112
+ "{}: OIDC token not provided. Set oidc_token, oidc_token_file, "
113
+ "or BYTEPLUS_OIDC_TOKEN_FILE environment variable.".format(self.PROVIDER_NAME)
114
+ )
115
+
116
+ try:
117
+ with open(token_file, 'r') as f:
118
+ token = f.read().strip()
119
+ except (IOError, OSError) as e:
120
+ raise RuntimeError(
121
+ "{}: failed to read OIDC token file '{}': {}".format(
122
+ self.PROVIDER_NAME, token_file, e
123
+ )
124
+ )
125
+
126
+ if not token:
127
+ raise RuntimeError(
128
+ "{}: OIDC token file '{}' is empty.".format(self.PROVIDER_NAME, token_file)
129
+ )
130
+
131
+ return token
132
+
64
133
  def _assume_role_oidc(self):
134
+ if not self._role_trn:
135
+ raise RuntimeError(
136
+ "{}: role_trn not provided. Set role_trn (or role_name+account_id), "
137
+ "or BYTEPLUS_OIDC_ROLE_TRN environment variable.".format(self.PROVIDER_NAME)
138
+ )
139
+
140
+ oidc_token = self._resolve_oidc_token()
141
+
142
+ if self._session_name:
143
+ session_name = self._session_name
144
+ elif self._legacy_mode:
145
+ session_name = uuid.uuid4().hex
146
+ else:
147
+ session_name = "credentials-python-" + str(int(time.time() * 1000000))
148
+
65
149
  params = {
66
150
  'DurationSeconds': self.duration_seconds,
67
- 'RoleSessionName': uuid.uuid4().hex,
68
- 'RoleTrn': 'trn:iam::' + self.account_id + ':role/' + self.role_name,
69
- 'OIDCToken': self.oidc_token,
151
+ 'RoleSessionName': session_name,
152
+ 'RoleTrn': self._role_trn,
153
+ 'OIDCToken': oidc_token,
70
154
  }
71
- if self.policy is not None:
155
+ if self.policy:
72
156
  params['Policy'] = self.policy
73
- configuration = type.__call__(Configuration)
74
-
75
- # configuration.ak = self.ak
76
- # configuration.sk = self.sk
77
- configuration.host = self.host
78
- configuration.region = self.region
79
- configuration.scheme = self.scheme
80
- configuration.read_timeout = self.timeout
81
- c = UniversalApi(ApiClient(configuration))
82
- info = UniversalInfo(method='POST', service='sts', version='2018-01-01', action='AssumeRoleWithOIDC',
83
- content_type='application/x-www-form-urlencoded')
84
-
85
- resp, status_code, resp_header = c.do_call_with_http_info(info=info, body=params)
86
- if 'Credentials' not in resp:
87
- raise RuntimeError('failed to retrieve credentials from sts' + str(resp_header))
88
- resp_cred = resp['Credentials']
89
-
90
- # Parse the ISO string
91
- dt = dateutil.parser.parse(resp_cred['Expiration'])
92
-
93
- # Convert to timestamp (seconds since epoch)
157
+
158
+ # Late imports to avoid circular deps (auth.providers is imported
159
+ # indirectly by byteplussdkcore/__init__.py).
160
+ from byteplussdkcore import ApiClient, Configuration
161
+ resp_result = ApiClient(Configuration())._sts_call(
162
+ action='AssumeRoleWithOIDC',
163
+ version='2018-01-01',
164
+ params=params,
165
+ host=self.host,
166
+ scheme=self.scheme,
167
+ region=self.region,
168
+ timeout=self.timeout,
169
+ max_retries=self.max_retries,
170
+ retry_interval=self.retry_interval,
171
+ provider_name=self.PROVIDER_NAME,
172
+ )
173
+ if 'Credentials' not in resp_result:
174
+ raise RuntimeError(
175
+ 'failed to retrieve credentials from sts {}:{}'.format(
176
+ self.PROVIDER_NAME, str(resp_result)
177
+ )
178
+ )
179
+ resp_cred = resp_result['Credentials']
180
+
181
+ dt = dateutil.parser.parse(resp_cred.get('Expiration', resp_cred.get('ExpiredTime')))
94
182
  self.expired_time = (dt - datetime(1970, 1, 1, tzinfo=dateutil.tz.tzutc())).total_seconds()
95
183
 
96
- self.credentials = CredentialValue(ak=resp_cred['AccessKeyId'],
97
- sk=resp_cred['SecretAccessKey'],
98
- session_token=resp_cred['SessionToken'],
99
- provider_name='StsOidcCredentialProvider')
184
+ self.credentials = CredentialValue(
185
+ ak=resp_cred['AccessKeyId'],
186
+ sk=resp_cred['SecretAccessKey'],
187
+ session_token=resp_cred['SessionToken'],
188
+ provider_name=self.PROVIDER_NAME,
189
+ )
@@ -20,13 +20,15 @@ class AssumeRoleCredentials:
20
20
 
21
21
  class StsCredentialProvider(Provider):
22
22
  def __init__(self, ak, sk, role_name, account_id, duration_seconds=3600, scheme='https',
23
- host='open.byteplusapi.com', region='ap-singapore-1', timeout=30, expired_buffer_seconds=60,policy = None):
23
+ host='sts.ap-southeast-1.byteplusapi.com', region='ap-southeast-1', timeout=30, expired_buffer_seconds=60, policy=None, max_retries=3, retry_interval=1):
24
24
  self.ak = ak
25
25
  self.sk = sk
26
26
  self.role_name = role_name
27
27
  self.account_id = account_id
28
28
 
29
29
  self.timeout = timeout
30
+ self.max_retries = max(max_retries, 1)
31
+ self.retry_interval = retry_interval
30
32
  self.duration_seconds = duration_seconds
31
33
 
32
34
  self.host = host
@@ -74,6 +76,13 @@ class StsCredentialProvider(Provider):
74
76
  configuration.region = self.region
75
77
  configuration.scheme = self.scheme
76
78
  configuration.read_timeout = self.timeout
79
+
80
+ import copy
81
+ configuration._Configuration__retryer = copy.deepcopy(configuration.retryer)
82
+ configuration.num_max_retries = max(self.max_retries - 1, 0)
83
+ delay_ms = int(self.retry_interval * 1000)
84
+ configuration.min_retry_delay_ms = delay_ms
85
+ configuration.max_retry_delay_ms = delay_ms
77
86
  c = UniversalApi(ApiClient(configuration))
78
87
  info = UniversalInfo(method='GET', service='sts', version='2018-01-01', action='AssumeRole',
79
88
  content_type='text/plain')