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,628 @@
1
+ # coding=utf-8
2
+ import calendar
3
+ import hashlib
4
+ import json
5
+ import os
6
+ import tempfile
7
+ import threading
8
+ import time
9
+
10
+ from datetime import datetime
11
+
12
+ from .provider import Provider, CredentialValue
13
+
14
+ _DEFAULT_REGION = "ap-southeast-1"
15
+ _OAUTH_BASE_URL_TEMPLATE = "https://cloudidentity-oauth.{}.bytepluses.com"
16
+ _PORTAL_BASE_URL_TEMPLATE = "https://cloudidentity-portal.{}.bytepluses.com"
17
+ _PORTAL_ACCESS_TOKEN_HEADER = "x-bd-cloudidentity-bearer-token"
18
+ _HTTP_TIMEOUT = 30
19
+ _HTTP_MAX_RETRIES = 3
20
+ _HTTP_RETRY_INTERVAL = 1
21
+
22
+
23
+ class CLIConfigCredentialProvider(Provider):
24
+ PROVIDER_NAME = "CLIConfigCredentialProvider"
25
+
26
+ def __init__(self, profile_name=None, config_path=None):
27
+ self._profile_name = profile_name
28
+ self._config_path = config_path
29
+ self._delegate = None
30
+ self._static_cred = None
31
+ self._initialized = False
32
+ self._init_lock = threading.Lock()
33
+ self._resolved_config_path = None
34
+
35
+ def _init_delegate(self):
36
+ profile, profile_name, config = self._load_profile()
37
+ raw_mode = profile.get("mode", "") or ""
38
+ mode = raw_mode.lower().strip()
39
+
40
+ if mode in ("ak", ""):
41
+ self._static_cred = self._read_ak_mode(profile, profile_name)
42
+ elif mode == "ramrolearn":
43
+ self._static_cred = None
44
+ self._delegate = self._create_ram_role_arn_delegate(profile, profile_name)
45
+ elif mode == "oidc":
46
+ self._static_cred = None
47
+ self._delegate = self._create_oidc_delegate(profile, profile_name)
48
+ elif mode == "ecsrole":
49
+ self._static_cred = None
50
+ self._delegate = self._create_ecs_role_delegate(profile, profile_name)
51
+ elif mode == "sso":
52
+ self._static_cred = None
53
+ self._delegate = self._create_sso_delegate(profile, profile_name, config)
54
+ else:
55
+ raise RuntimeError(
56
+ "{}: unsupported mode: {}".format(self.PROVIDER_NAME, mode)
57
+ )
58
+
59
+ def _load_profile(self):
60
+ config_path = (
61
+ self._config_path
62
+ or os.environ.get("BYTEPLUS_CLI_CONFIG_FILE")
63
+ or os.path.expanduser("~/.byteplus/config.json")
64
+ )
65
+ self._resolved_config_path = config_path
66
+
67
+ if not os.path.isfile(config_path):
68
+ raise RuntimeError(
69
+ "{}: config file not found at '{}'.".format(self.PROVIDER_NAME, config_path)
70
+ )
71
+
72
+ with open(config_path, 'r') as f:
73
+ try:
74
+ config = json.load(f)
75
+ except ValueError as e:
76
+ raise RuntimeError(
77
+ "{}: failed to parse config file '{}': {}".format(
78
+ self.PROVIDER_NAME, config_path, e
79
+ )
80
+ )
81
+
82
+ profile_name = (self._profile_name
83
+ or os.environ.get("BYTEPLUS_PROFILE")
84
+ or config.get("current"))
85
+
86
+ if not profile_name:
87
+ profile_name = "default"
88
+
89
+ profiles = config.get("profiles", {})
90
+ profile = profiles.get(profile_name)
91
+
92
+ if profile is None:
93
+ raise RuntimeError(
94
+ "{}: profile '{}' not found in config file.".format(
95
+ self.PROVIDER_NAME, profile_name
96
+ )
97
+ )
98
+
99
+ return profile, profile_name, config
100
+
101
+ def retrieve(self):
102
+ return self.get_credentials()
103
+
104
+ def is_expired(self):
105
+ if not self._initialized:
106
+ return True
107
+ if self._delegate is not None:
108
+ return self._delegate.is_expired()
109
+ return False
110
+
111
+ def refresh(self):
112
+ if self._delegate is not None:
113
+ return self._delegate.refresh()
114
+ return
115
+
116
+ def get_credentials(self):
117
+ if not self._initialized:
118
+ with self._init_lock:
119
+ if not self._initialized:
120
+ self._init_delegate()
121
+ self._initialized = True
122
+ if self._delegate is not None:
123
+ return self._delegate.get_credentials()
124
+ return self._static_cred
125
+
126
+ def _read_ak_mode(self, profile, profile_name):
127
+ ak = profile.get("access-key", "").strip()
128
+ sk = profile.get("secret-key", "").strip()
129
+
130
+ if not ak or not sk:
131
+ raise RuntimeError(
132
+ "{}: profile '{}' does not contain valid access-key and secret-key.".format(
133
+ self.PROVIDER_NAME, profile_name
134
+ )
135
+ )
136
+
137
+ session_token = profile.get("session-token", "").strip() or None
138
+
139
+ return CredentialValue(
140
+ ak=ak,
141
+ sk=sk,
142
+ session_token=session_token,
143
+ provider_name=self.PROVIDER_NAME,
144
+ )
145
+
146
+ def _create_ram_role_arn_delegate(self, profile, profile_name):
147
+ from .sts_provider import StsCredentialProvider
148
+
149
+ ak = profile.get("access-key", "").strip()
150
+ sk = profile.get("secret-key", "").strip()
151
+ role_name = profile.get("role-name", "").strip()
152
+ account_id = profile.get("account-id", "").strip()
153
+
154
+ if not ak or not sk:
155
+ raise RuntimeError(
156
+ "{}: profile '{}' mode is RamRoleArn but access-key/secret-key is not set.".format(
157
+ self.PROVIDER_NAME, profile_name
158
+ )
159
+ )
160
+ if not role_name:
161
+ raise RuntimeError(
162
+ "{}: profile '{}' mode is RamRoleArn but role-name is not set.".format(
163
+ self.PROVIDER_NAME, profile_name
164
+ )
165
+ )
166
+ if not account_id:
167
+ raise RuntimeError(
168
+ "{}: profile '{}' mode is RamRoleArn but account-id is not set.".format(
169
+ self.PROVIDER_NAME, profile_name
170
+ )
171
+ )
172
+
173
+ kwargs = dict(ak=ak, sk=sk, role_name=role_name, account_id=account_id)
174
+ region = (profile.get("region") or "").strip()
175
+ if region:
176
+ kwargs["region"] = region
177
+ return StsCredentialProvider(**kwargs)
178
+
179
+ def _create_oidc_delegate(self, profile, profile_name):
180
+ from .sts_oidc_provider import StsOidcCredentialProvider
181
+
182
+ role_trn = (profile.get("role-trn") or "").strip()
183
+ oidc_token_file = (profile.get("oidc-token-file") or "").strip()
184
+ policy = (profile.get("policy") or "").strip() or None
185
+
186
+ if not role_trn:
187
+ raise RuntimeError(
188
+ "{}: profile '{}' mode is OIDC but role-trn is not set.".format(
189
+ self.PROVIDER_NAME, profile_name
190
+ )
191
+ )
192
+ if not oidc_token_file:
193
+ raise RuntimeError(
194
+ "{}: profile '{}' mode is OIDC but oidc-token-file is not set.".format(
195
+ self.PROVIDER_NAME, profile_name
196
+ )
197
+ )
198
+
199
+ kwargs = dict(role_trn=role_trn, oidc_token_file=oidc_token_file, policy=policy)
200
+ region = (profile.get("region") or "").strip()
201
+ if region:
202
+ kwargs["region"] = region
203
+ return StsOidcCredentialProvider(**kwargs)
204
+
205
+ def _create_ecs_role_delegate(self, profile, profile_name):
206
+ from .ecs_role_provider import EcsRoleCredentialProvider
207
+
208
+ role_name = profile.get("role-name", "").strip()
209
+
210
+ if not role_name:
211
+ raise RuntimeError(
212
+ "{}: profile '{}' mode is EcsRole but role-name is not set.".format(
213
+ self.PROVIDER_NAME, profile_name
214
+ )
215
+ )
216
+
217
+ return EcsRoleCredentialProvider(role_name=role_name)
218
+
219
+ def _create_sso_delegate(self, profile, profile_name, config):
220
+ session_name = (profile.get("sso-session-name") or "").strip()
221
+ if not session_name:
222
+ raise RuntimeError(
223
+ "{}: profile '{}' mode is sso but sso-session-name is not set.".format(
224
+ self.PROVIDER_NAME, profile_name
225
+ )
226
+ )
227
+
228
+ sso_sessions = config.get("sso-session", {}) or {}
229
+ session = sso_sessions.get(session_name)
230
+ if session is None:
231
+ raise RuntimeError(
232
+ "{}: sso-session '{}' not found in config file.".format(
233
+ self.PROVIDER_NAME, session_name
234
+ )
235
+ )
236
+
237
+ start_url = (session.get("start-url") or "").strip()
238
+ if not start_url:
239
+ raise RuntimeError(
240
+ "{}: sso-session '{}' does not contain start-url.".format(
241
+ self.PROVIDER_NAME, session_name
242
+ )
243
+ )
244
+
245
+ region = (session.get("region") or "").strip() or _DEFAULT_REGION
246
+
247
+ account_id = (profile.get("account-id") or "").strip()
248
+ if not account_id:
249
+ raise RuntimeError(
250
+ "{}: profile '{}' mode is sso but account-id is not set.".format(
251
+ self.PROVIDER_NAME, profile_name
252
+ )
253
+ )
254
+
255
+ role_name = (profile.get("role-name") or "").strip()
256
+ if not role_name:
257
+ raise RuntimeError(
258
+ "{}: profile '{}' mode is sso but role-name is not set.".format(
259
+ self.PROVIDER_NAME, profile_name
260
+ )
261
+ )
262
+
263
+ config_path = self._resolved_config_path or (
264
+ self._config_path
265
+ or os.environ.get("BYTEPLUS_CLI_CONFIG_FILE")
266
+ or os.path.expanduser("~/.byteplus/config.json")
267
+ )
268
+ cache_dir = os.path.join(os.path.dirname(config_path), "sso", "cache")
269
+
270
+ return SsoCredentialProvider(
271
+ profile=profile,
272
+ start_url=start_url,
273
+ session_name=session_name,
274
+ region=region,
275
+ account_id=account_id,
276
+ role_name=role_name,
277
+ cache_dir=cache_dir,
278
+ )
279
+
280
+
281
+ def _unix_timestamp_to_epoch(ts):
282
+ if ts >= 1e18:
283
+ return ts / 1e9
284
+ elif ts >= 1e15:
285
+ return ts / 1e6
286
+ elif ts >= 1e12:
287
+ return ts / 1e3
288
+ else:
289
+ return float(ts)
290
+
291
+
292
+ def _token_cache_filename(start_url, session_name):
293
+ payload = json.dumps({"start_url": start_url, "session_name": session_name},
294
+ separators=(',', ':'), sort_keys=False)
295
+ digest = hashlib.sha1(payload.encode("utf-8")).hexdigest()
296
+ return "{}.json".format(digest)
297
+
298
+
299
+ def _parse_rfc3339(value):
300
+ value = value.strip()
301
+ if not value:
302
+ raise ValueError("expires_at is empty")
303
+ if value.endswith("Z"):
304
+ value = value[:-1] + "+00:00"
305
+ try:
306
+ return datetime.fromisoformat(value)
307
+ except (ValueError, AttributeError):
308
+ pass
309
+ for fmt in ("%Y-%m-%dT%H:%M:%S%z", "%Y-%m-%dT%H:%M:%S.%f%z",
310
+ "%Y-%m-%dT%H:%M:%S", "%Y-%m-%dT%H:%M:%S.%f"):
311
+ try:
312
+ return datetime.strptime(value, fmt)
313
+ except ValueError:
314
+ continue
315
+ raise ValueError("cannot parse expires_at: {}".format(value))
316
+
317
+
318
+ def _rfc3339_to_epoch(value):
319
+ exp_dt = _parse_rfc3339(value)
320
+ if exp_dt.tzinfo:
321
+ utc_dt = exp_dt - exp_dt.utcoffset()
322
+ return calendar.timegm(utc_dt.timetuple())
323
+ return calendar.timegm(exp_dt.timetuple())
324
+
325
+
326
+ def _write_json_file_atomic(path, data):
327
+ dir_name = os.path.dirname(path)
328
+ if not os.path.exists(dir_name):
329
+ try:
330
+ os.makedirs(dir_name)
331
+ except OSError:
332
+ pass
333
+ fd, tmp_path = tempfile.mkstemp(dir=dir_name, prefix=".tmp-", suffix=".json")
334
+ try:
335
+ with os.fdopen(fd, 'w') as f:
336
+ json.dump(data, f)
337
+ os.chmod(tmp_path, 0o600)
338
+ os.rename(tmp_path, path)
339
+ except Exception:
340
+ try:
341
+ os.remove(tmp_path)
342
+ except OSError:
343
+ pass
344
+ raise
345
+
346
+
347
+ class SsoCredentialProvider(Provider):
348
+ PROVIDER_NAME = "SsoCredentialProvider"
349
+
350
+ def __init__(self, profile, start_url, session_name, region,
351
+ account_id, role_name, cache_dir):
352
+ self._profile = profile
353
+ self._start_url = start_url
354
+ self._session_name = session_name
355
+ self._region = region
356
+ self._account_id = account_id
357
+ self._role_name = role_name
358
+ self._cache_dir = cache_dir
359
+
360
+ self._credentials = None
361
+ self._expiration = None
362
+ self._lock = threading.Lock()
363
+
364
+ def retrieve(self):
365
+ return self.get_credentials()
366
+
367
+ def is_expired(self):
368
+ if self._credentials is None:
369
+ return True
370
+ if self._expiration is not None:
371
+ return time.time() >= self._expiration - 60
372
+ return False
373
+
374
+ def refresh(self):
375
+ with self._lock:
376
+ if self.is_expired():
377
+ self._do_refresh()
378
+
379
+ def get_credentials(self):
380
+ self.refresh()
381
+ return self._credentials
382
+
383
+ def _do_refresh(self):
384
+ cred = self._try_cached_sts_credentials()
385
+ if cred is not None:
386
+ self._credentials = cred
387
+ return
388
+
389
+ token_path = os.path.join(
390
+ self._cache_dir,
391
+ _token_cache_filename(self._start_url, self._session_name),
392
+ )
393
+ if not os.path.isfile(token_path):
394
+ raise RuntimeError(
395
+ "{}: SSO token cache file not found at '{}'.".format(
396
+ self.PROVIDER_NAME, token_path
397
+ )
398
+ )
399
+
400
+ with open(token_path, 'r') as f:
401
+ try:
402
+ token_cache = json.load(f)
403
+ except ValueError as e:
404
+ raise RuntimeError(
405
+ "{}: failed to parse SSO token cache '{}': {}".format(
406
+ self.PROVIDER_NAME, token_path, e
407
+ )
408
+ )
409
+
410
+ access_token = (token_cache.get("access_token") or "").strip()
411
+ if not access_token:
412
+ raise RuntimeError(
413
+ "{}: SSO token cache '{}' does not contain access_token.".format(
414
+ self.PROVIDER_NAME, token_path
415
+ )
416
+ )
417
+
418
+ expires_at = (token_cache.get("expires_at") or "").strip()
419
+ token_expired = False
420
+ if expires_at:
421
+ try:
422
+ exp_epoch = _rfc3339_to_epoch(expires_at)
423
+ token_expired = time.time() > exp_epoch
424
+ except ValueError as e:
425
+ raise RuntimeError(
426
+ "{}: failed to parse expires_at in '{}': {}".format(
427
+ self.PROVIDER_NAME, token_path, e
428
+ )
429
+ )
430
+
431
+ if token_expired:
432
+ access_token = self._refresh_access_token(token_cache, token_path)
433
+
434
+ self._fetch_role_credentials(access_token)
435
+
436
+ def _try_cached_sts_credentials(self):
437
+ sts_expiration = self._profile.get("sts-expiration", 0)
438
+ if not sts_expiration or sts_expiration <= 0:
439
+ return None
440
+
441
+ exp_epoch = _unix_timestamp_to_epoch(sts_expiration)
442
+ if time.time() >= exp_epoch:
443
+ return None
444
+
445
+ ak = (self._profile.get("access-key") or "").strip()
446
+ sk = (self._profile.get("secret-key") or "").strip()
447
+ if not ak or not sk:
448
+ return None
449
+
450
+ session_token = (self._profile.get("session-token") or "").strip() or None
451
+
452
+ self._expiration = exp_epoch
453
+ return CredentialValue(
454
+ ak=ak,
455
+ sk=sk,
456
+ session_token=session_token,
457
+ provider_name=self.PROVIDER_NAME,
458
+ )
459
+
460
+ def _refresh_access_token(self, token_cache, token_path):
461
+ refresh_token = (token_cache.get("refresh_token") or "").strip()
462
+ if not refresh_token:
463
+ raise RuntimeError(
464
+ "{}: SSO token cache '{}' does not contain refresh_token.".format(
465
+ self.PROVIDER_NAME, token_path
466
+ )
467
+ )
468
+
469
+ client_secret_expires_at = token_cache.get("client_secret_expires_at", 0)
470
+ if client_secret_expires_at and client_secret_expires_at > 0:
471
+ exp_epoch = _unix_timestamp_to_epoch(client_secret_expires_at)
472
+ if time.time() >= exp_epoch:
473
+ raise RuntimeError(
474
+ "{}: refresh token in '{}' has expired.".format(
475
+ self.PROVIDER_NAME, token_path
476
+ )
477
+ )
478
+
479
+ client_id = (token_cache.get("client_id") or "").strip()
480
+ client_secret = (token_cache.get("client_secret") or "").strip()
481
+ if not client_id or not client_secret:
482
+ raise RuntimeError(
483
+ "{}: SSO token cache '{}' does not contain client_id/client_secret.".format(
484
+ self.PROVIDER_NAME, token_path
485
+ )
486
+ )
487
+
488
+ oauth_url = "{}/token".format(
489
+ _OAUTH_BASE_URL_TEMPLATE.format(self._region)
490
+ )
491
+
492
+ # Late imports to avoid circular deps (auth.providers is imported
493
+ # indirectly by byteplussdkcore/__init__.py).
494
+ from byteplussdkcore import ApiClient, Configuration
495
+ # Pass a dict body; RESTClient auto-serializes with Content-Type:
496
+ # application/json (see byteplussdkcore/rest.py). Do NOT json.dumps
497
+ # here or it will be double-encoded.
498
+ resp_body = ApiClient(Configuration())._do_http_request(
499
+ oauth_url,
500
+ method="POST",
501
+ data={
502
+ "grant_type": "refresh_token",
503
+ "client_id": client_id,
504
+ "client_secret": client_secret,
505
+ "refresh_token": refresh_token,
506
+ },
507
+ headers={"Content-Type": "application/json"},
508
+ timeout=_HTTP_TIMEOUT,
509
+ max_retries=_HTTP_MAX_RETRIES,
510
+ retry_interval=_HTTP_RETRY_INTERVAL,
511
+ request_name="OAuth token refresh",
512
+ # OAuth refresh_token grants may rotate the refresh token on use;
513
+ # replaying a successful-but-response-lost POST would invalidate
514
+ # the local refresh_token. Fail fast on 5xx instead.
515
+ retry_on_5xx=False,
516
+ provider_name=self.PROVIDER_NAME,
517
+ )
518
+
519
+ try:
520
+ resp_data = json.loads(resp_body)
521
+ except ValueError as e:
522
+ raise RuntimeError(
523
+ "{}: failed to parse OAuth token response: {}".format(
524
+ self.PROVIDER_NAME, e
525
+ )
526
+ )
527
+
528
+ new_access_token = (resp_data.get("access_token") or "").strip()
529
+ if not new_access_token:
530
+ raise RuntimeError(
531
+ "{}: OAuth token response did not contain access_token.".format(
532
+ self.PROVIDER_NAME
533
+ )
534
+ )
535
+
536
+ expires_in = resp_data.get("expires_in", 0)
537
+ if expires_in <= 0:
538
+ raise RuntimeError(
539
+ "{}: OAuth token response did not contain valid expires_in.".format(
540
+ self.PROVIDER_NAME
541
+ )
542
+ )
543
+
544
+ token_cache["access_token"] = new_access_token
545
+ new_refresh = (resp_data.get("refresh_token") or "").strip()
546
+ if new_refresh:
547
+ token_cache["refresh_token"] = new_refresh
548
+ token_cache["expires_at"] = time.strftime(
549
+ "%Y-%m-%dT%H:%M:%SZ", time.gmtime(time.time() + expires_in)
550
+ )
551
+
552
+ _write_json_file_atomic(token_path, token_cache)
553
+
554
+ return new_access_token
555
+
556
+ def _fetch_role_credentials(self, access_token):
557
+ try:
558
+ from urllib.parse import urlencode
559
+ except ImportError:
560
+ from urllib import urlencode
561
+
562
+ portal_url = "{}/federation/credentials?{}".format(
563
+ _PORTAL_BASE_URL_TEMPLATE.format(self._region),
564
+ urlencode({"account_id": self._account_id, "role_name": self._role_name}),
565
+ )
566
+
567
+ # Late imports to avoid circular deps (auth.providers is imported
568
+ # indirectly by byteplussdkcore/__init__.py).
569
+ from byteplussdkcore import ApiClient, Configuration
570
+ resp_body = ApiClient(Configuration())._do_http_request(
571
+ portal_url,
572
+ method="GET",
573
+ headers={
574
+ "Accept": "application/json",
575
+ _PORTAL_ACCESS_TOKEN_HEADER: access_token,
576
+ },
577
+ timeout=_HTTP_TIMEOUT,
578
+ max_retries=_HTTP_MAX_RETRIES,
579
+ retry_interval=_HTTP_RETRY_INTERVAL,
580
+ request_name="Portal GetRoleCredentials",
581
+ provider_name=self.PROVIDER_NAME,
582
+ )
583
+
584
+ try:
585
+ resp_data = json.loads(resp_body)
586
+ except ValueError as e:
587
+ raise RuntimeError(
588
+ "{}: failed to parse Portal response: {}".format(
589
+ self.PROVIDER_NAME, e
590
+ )
591
+ )
592
+
593
+ result = resp_data.get("Result") or resp_data.get("result") or {}
594
+ role_creds = result.get("RoleCredentials") or result.get("roleCredentials") or {}
595
+
596
+ ak = (role_creds.get("AccessKeyId") or "").strip()
597
+ sk = (role_creds.get("SecretAccessKey") or "").strip()
598
+ token = (role_creds.get("sessionToken") or role_creds.get("SessionToken") or "").strip()
599
+
600
+ if not ak or not sk:
601
+ meta = resp_data.get("ResponseMetadata", {})
602
+ err = meta.get("Error", {})
603
+ if err:
604
+ raise RuntimeError(
605
+ "{}: Portal API error: {} - {}".format(
606
+ self.PROVIDER_NAME,
607
+ err.get("Code", ""),
608
+ err.get("Message", ""),
609
+ )
610
+ )
611
+ raise RuntimeError(
612
+ "{}: Portal response missing AccessKeyId/SecretAccessKey.".format(
613
+ self.PROVIDER_NAME
614
+ )
615
+ )
616
+
617
+ expiration = role_creds.get("Expiration", 0)
618
+ if expiration and expiration > 0:
619
+ self._expiration = _unix_timestamp_to_epoch(expiration)
620
+ else:
621
+ self._expiration = None
622
+
623
+ self._credentials = CredentialValue(
624
+ ak=ak,
625
+ sk=sk,
626
+ session_token=token or None,
627
+ provider_name=self.PROVIDER_NAME,
628
+ )